У меня есть следующая структура каталогов:
base/
files/
archives/
scripts/
Я хочу, чтобы скрипт запускался scripts/
, сжимал файлы, которые совпадают, results.*.log
в files/
архив tar с gzip archives/
.
Я пытаюсь следующую команду:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Но я получаю
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Пока
tar czfC ../archives/archive.tar.gz ../files results.a.log
работает как положено. Также
tar czf ../archives/archive.tar.gz ../files/results.*.log
работает так, как мне хотелось бы, за исключением того, что он добавляет префикс files/
к файлу, а также выдает предупреждение:
tar: Removing leading `../' from member names
Таким образом, мой вывод заключается в том, что tar
при использовании этой -C
опции глобирование не работает должным образом . Любой совет о том, как мне сделать эту работу простым способом?
cd
произойдет.&&
Это как;
или новая строка, он разделяет две команды. Это все равно что сказать, что после запускаcd
любой глобал раскроет файлы в предыдущем каталоге.Здесь нет «разбрасывания гудрона», разбрасывание производится оболочкой. И оболочка понятия не имеет, что
tar -C somedir
будет делать свою работуsomedir
, любые глобусы раскрываются в текущем каталоге.источник
results.a.log
существует в каталоге, из которого запускается скрипт, он работает. Но я не понимаю, почему это происходит, так как-C
обозначает изменение каталога, поэтому текущий каталог должен быть тот, с которымresults.a.log
. Я не могу принять ваш ответ, потому что вы не предлагаете решение.tar
программу, которая значительно позже меняет каталог. Не могу "решить" вашу проблему, извините. Единственный выход - перейти в каталог, в котором вы хотите выполнить глобализацию, или выполнить глобализацию в каталоге и сохранить результаты в файле или переменной.Вы можете разрешить
find
выполнять глобализацию и опустить опцию «изменить каталог»tar
, удаливfiles/
префикс перед созданием tar-файла.--no-recursion
Вариант неtar
является обязательным , так как никаких каталогов не будут заархивированы.источник
Я наконец-то использовал
источник
Для этого нужно написать что-то вроде следующего:
источник
Это не смола, которая делает сгусток, это оболочка. Сначала вы говорите оболочке делать globbing, а затем говорите tar об изменении каталогов. Поскольку tar получает список имен файлов относительно исходных каталогов, это не работает.
На сегодняшний день самое простое решение - позволить оболочке изменить каталог. Интерактивное:
В скрипте:
или
источник