Назад | Перейти на главную страницу

Использование find для исключения каталога и архивирования всего остального в каталоге

У меня в каталоге есть:

dir1
dir2
file1
файл2

Я хочу затереть все, кроме dir1

Когда я делаю:

find . -path '*dir1*' -prune -o -print

Я не вижу dir1 в выводе (как и ожидалось)

Но когда я сделаю:

find . -path '*dir1*' -prune -o -exec tar -czvf documents.tgz  '{}' \+

Я вижу, что dir1 также засыпается в documents.tgz. Зачем ?

Это из-за . на выходе. . также получает tarизд.

Используйте этот intead, он исключит оба; . и dir1:

find . -not -path '*dir1*' -not -path "." -exec tar -czvf documents.tgz  '{}' \+

См. Содержание documents.tgz:

$ tar tf documents.tgz
./file2
./file1
./dir2/

tar также имеет параметр «исключить», который можно добавить один или несколько раз.

Например:

tar czvf documents.tgz --exlude dir1 --exclude dir2 * 

Примечание: я бы предпочел создать tar в другом каталоге, чтобы не включать в tar сам файл documents.tgz на случай, если вы запустите команду в другой раз, не удаляя ее тем временем.