Непонятно, чего вы пытаетесь достичь. Я убегаю от варианта использования, когда здесь должны сжиматься только подкаталоги.
Сначала перейдите в каталог, содержащий коллекцию каталогов, а затем:
find -maxdepth 1 -type d | {
while read dir; do
if [ ! "x${dir#*/}" = "x." ]; then
tar cJf ${dir#*/}.tar.xz ${dir#*/};
fi;
done
}
Это хорошо работает с zsh
. Для проверки поместите echo
перед tar
, чтобы увидеть, проверяется ли команда и т. Д.
Однако создание такой коллекции архивов обычно нежелательно. Обычно вы хотите сжать всю коллекцию, использовать прозрачное сжатие диска, на котором находятся эти файлы, или использовать транспортное сжатие (например, X-DEFLATE
с HTTP).
Имейте в виду, что вы получите не «сжатый каталог», а «сжатый архив», эти вещи не взаимозаменяемы, так как архивы сами по себе являются файлами, а каталоги - просто дейтаграммами inode .