Вот с чего я начинаю:

ls "$A"
<current_directory>
ls "$B"
<nothing>
ls "$C"
my_file

Вот что я хочу закончить:

tar -vczf <magic> "${B}/my_archive.tar.gz" "${C}/my_file"
ls "$B"
my_archive.tar.gz # contains my_file at root of archive (no directory)
pwd
<still in A>

Я прочитал man-страницу tar несколько раз. Мой единственный вывод заключается в том, что было бы легче читать, если бы флаги были перечислены в алфавитном порядке, а не сгруппированы по функциям. ; - | Я чувствую, что эта проблема должна быть решена с помощью какого-то заклинания с флагом -C, но это, кажется, только помогает получить файл на C. Я также пытался преодолеть ограничения tar с помощью различных итераций:

pushd "$B"
tar -vczf <magic> "my_archive.tar.gz" "${C}/my_file"
popd

В крайнем случае подход будет:

pushd "$C"
tar -vczf my_archive.tar.gz my_file
mv my_archive.tar.gz "$B"
popd

Это единственное, что до сих пор работало. Хотя 4 команды !? Там должен быть лучший путь.

Соответствующий XKCD.

1 ответ1

1

Предполагая, что $A , $B и $C являются абсолютными путями, что-то вроде

tar -C "$C" -czf "$B/my_archive.tar.gz" "my_file"

должен работать: параметр -C переводится в «Изменить на DIR перед выполнением каких-либо операций.Эта опция чувствительна к порядку, то есть влияет на все последующие опции. "

Вам понадобится $(realpath $A) и друзья, чтобы исправить относительные пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .