У меня в каталоге есть:
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 на случай, если вы запустите команду в другой раз, не удаляя ее тем временем.