Я скачал тарбол (abc.tar.gz), в котором есть корневая папка (abc) и несколько подпапок (a , b , c и т.д.). И у меня есть папка Target на компьютере (MacBook Pro), с несколькими подпапками (a , b , c и т.д.).
Теперь я хочу разархивировать tar-архив в Target папку и автоматически объединить подпапки. Как мне этого добиться? Я попытался разархивировать его в Target но в результате получился подпапка (abc) в Target:

cp abc.tar.gz ~/Target
cd ~/Target
tar xzvf abc.tar.gz

Результат:

Target/abc/a
Target/abc/b
Target/a
Target/b

Что я хочу это:

Target/a    # auto merged
Target/b    # auto merged

Заранее спасибо!

1 ответ1

1

К сожалению, tar всегда распаковывает полный архивный путь, даже если вы запрашиваете только один ресурс внутри пути подпапки. например:

$ tar -x abc/a -zvf abc.tar.gz 

распакует только подпапку a, но ее родительский каталог abc все равно будет создан.

Из целевого каталога вы можете сделать

$ for d in `ls abc`; do cp -rf abc/$d/* ./$d/; done

скопировать архивные папки в уже существующих, папки одноименных в текущей папке Target

или просто

$ cp -rf abc/* ./

создать все архивные папки в ~/Target . Если папка с именем, скажем, «foo» существует как в abc и в Target то содержимое abc/foo будет скопировано в Target/foo . Имейте в виду, однако, что на уровне файла abc/foo/bar.txt будет перезаписывать Target/foo/bar.txt без уведомления или предупреждения.

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