Tar список файлов, которые не все существуют

10

Я запускаю команду из сценария, как

tar -c -f ar.tar a b c d

где b, c и d могут не существовать и могут быть каталогами. Решения, которые я придумала, - это передать вывод команды ls -dto grep, затем объединить ее в tarкоманду или включить расширенные глобусы для @(a|b|c|d).

Есть ли более аккуратный способ сделать это? Я нахожусь на Debian Wheezy, у которого, кажется, нет --includeпараметра.

gidyn
источник
У вас есть --ignore-failed-readвариант?
Костас
1
Пробовал, все равно выдавал ошибку для файлов, которых вообще не существует.
Гыдын
1
Да, сообщение об ошибке присутствует, но архив создан.
Костас

Ответы:

8

ты можешь попробовать

 tar cf ar.tar $(ls a b c d )

где

  • c для создания
  • f ar.tar указать файл tar

  • $(ls a b c d) Укажет стандартному файлу, какой файл действительно присутствует (и выдаст ошибку для другого)

Archemar
источник
2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)работает отлично .. но я думаю, что это чище с extglob
Gidyn
теперь я портирую скрипт на dash, так что нет extglob- я использую код из моего комментария выше
gidyn
1

Если вы можете указать полный путь к файлам в архиве tar, вы можете сделать следующее:

tar -c -f ar.tar $(readlink -e a b c d)

-eВариант readlink будет канонизировать существующие имена файлов и молча игнорировать любые другие.

Энтон
источник
Я думаю, это может сработать, если я --strip-componentsпри извлечении
Гыдын,
0

использование

find path/to/dir -name "*.ext1" -o -name "*.ext2"

объяснение

  1. Первый параметр - это каталог, который вы хотите найти.
  2. По умолчанию findрекурсия.
  3. -oОзначает -or. Таким образом, выше означает поиск этого символа или этого. Если у вас есть только один шаблон, то нет необходимости -o.
  4. Кавычки вокруг шаблона подстановки обязательны.
Шиталь шах
источник