Кажется, у меня проблема. В моем текущем каталоге есть несколько разных типов файлов, и я хочу простосмола 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-