1

В терминале Linux: я нахожусь в папке say /home/user/origlocation/ Мне нужно перейти в папку, скажем ../source/ и найти все файлы с именем test*.txt . Затем мне нужно сжать (tar.gz) эти файлы в папку скажем /home/user/target/ и, самое главное, без структуры каталогов в файле tar (мне нужны только имена файлов в непосредственных извлеченных результатах tar). Пожалуйста помоги.

2 ответа2

2

Предполагая, что у вас есть новая tar , вы можете сделать это:

find ../source -name 'test*.txt' | tar --transform='s,.*/,,' -cvzf /home/user/target/test-txt.tar.gz -T-

Это работает с помощью команды find для создания списка файлов в целевом каталоге и ниже. Затем tar читает этот список из канала как stdin (используя "-T-"), затем создает нужный архив (включая сжатие с помощью gzip), преобразуя пути к выходным файлам с помощью выражения sed , которое удаляет все ведущие компоненты каталога.

Если на самом деле все ваши файлы находятся в одном каталоге, это еще проще:

(cd ../source; tar -cvzf /home/user/target/test-txt.tar.gz test*.txt)

Это работает с помощью вложенной оболочки, чтобы переместить вас в целевой каталог, но все равно записывает архив tar в требуемое конечное местоположение. Компоненты каталога не включены, потому что вы используете простой глобус оболочки для выбора файлов в рабочем каталоге).

-1

Это должно работать

cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation

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