Как найти определенные типы файлов и заархивировать их?

Как найти определенные типы файлов и заархивировать их?

Кажется, у меня проблема. В моем текущем каталоге есть несколько разных типов файлов, и я хочу простосмола the .pngфайлы. Я начал с этого:

find -name "*.png" | tar -cvf backupp.tar

Это не сработало, потому что я не указал, какие именно файлы, поэтому, посмотрев, как это сделали другие, я добавил xargs:

find -name "*.png" | xargs tar -cvf backupp.tar

На этот раз это сработало, и файл backupp.tar был создан, но вот в чем проблема. Я не могу его извлечь. Всякий раз, когда я набираю:

tar -xvf backupp.tar

Ничего не происходит. Я пробовал менять chmod и sudo, но ничего не помогает.

Итак, я ввел неправильную команду или я что-то упустил?

решение1

Каждый из ваших двух подходов был близок к успеху, но у каждого была своя определенная проблема.

В первом подходе вы пытаетесь передать список файлов в tar. Если вы хотите tarпрочитать список файлов из стандартного ввода, то вам нужно использовать параметры -T/ --files-fromи -, например

find -name '*.png' -print0 | tar -cvf backup.tar --null -T - 

Для справки см. официальную документацию:

ПРИМЕЧАНИЕ:Использование флагов -print0и --nullдолжно гарантировать, что этот метод также будет обрабатывать имена файлов, содержащие пробелы.

Во втором подходе вы пытаетесь запустить tarчерез xargs, но используете опцию "create" ( --create/ -c). Если вы используете опцию "create" с xargsили в цикле for, то она будет перезаписывать архив после каждой итерации. Вместо этого попробуйте использовать либо опцию "append" ( -a/ --append), либо опцию "update" ( -u/ --update), например:

find -name "*.png" -exec tar -uvf backupp.tar {} \;

Это позволит добавлять файлы в архив после каждой итерации, а не перезаписывать его.

В любом случае, как только вы закончите, вы можете использовать опцию «list» ( --list/ -t), чтобы просмотреть содержимое архива и убедиться, что все работает так, как ожидалось:

tar tf backupp.tar

решение2

Вы можете просто использовать подстановочный знак

tar -cvf backup.tar *.png

или с помощьюfind

find -name "*.png" | tar -cvf backup.tar -T -

опция -Tполучает имя файла из FILE, который в данном случае является stdin-

Связанный контент