Я запускаю команду из сценария, как
tar -c -f ar.tar a b c d
где b, c и d могут не существовать и могут быть каталогами. Решения, которые я придумала, - это передать вывод команды ls -d
to grep
, затем объединить ее в tar
команду или включить расширенные глобусы для @(a|b|c|d)
.
Есть ли более аккуратный способ сделать это? Я нахожусь на Debian Wheezy, у которого, кажется, нет --include
параметра.
--ignore-failed-read
вариант?Ответы:
ты можешь попробовать
где
c
для созданияf ar.tar
указать файл tar$(ls a b c d)
Укажет стандартному файлу, какой файл действительно присутствует (и выдаст ошибку для другого)источник
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
работает отлично .. но я думаю, что это чище с extglobextglob
- я использую код из моего комментария вышеЕсли вы можете указать полный путь к файлам в архиве tar, вы можете сделать следующее:
-e
Вариант readlink будет канонизировать существующие имена файлов и молча игнорировать любые другие.источник
--strip-components
при извлечениииспользование
объяснение
find
рекурсия.-o
Означает-or
. Таким образом, выше означает поиск этого символа или этого. Если у вас есть только один шаблон, то нет необходимости-o
.источник