В терминале Linux: я нахожусь в папке say /home/user/origlocation/
Мне нужно перейти в папку, скажем ../source/
и найти все файлы с именем test*.txt
. Затем мне нужно сжать (tar.gz) эти файлы в папку скажем /home/user/target/
и, самое главное, без структуры каталогов в файле tar (мне нужны только имена файлов в непосредственных извлеченных результатах tar). Пожалуйста помоги.
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 в требуемое конечное местоположение. Компоненты каталога не включены, потому что вы используете простой глобус оболочки для выбора файлов в рабочем каталоге).
Это должно работать
cd ../source && tar -cvf foo.tar test*.txt;
mv ./foo.tar /home/user/target/ && cd ../origlocation