Распаковать и переименовать файл одной командой

Распаковать и переименовать файл одной командой

У меня есть zip-файл, содержащий CSV, и я хотел бы распаковать его в определенную папку и переименовать файл так же, как имя zip-файла. Например.,

У меня есть zip-файл с именем: youtube_videos.csv.zip, и я хотел бы распаковать его в определенную папку с именем target и переименовать файл в этой папке в youtube-videos.csv. У меня он есть, но в двух строках, как показано ниже:

unzip datasets/youtube_videos.csv.zip -d target 
mv target/videos_data.csv target/youtube_videos.csv

Есть ли какой-то однострочник, который можно было бы использовать?

решение1

Вот однострочный вариант, но он не переименовывает файл, а выводит его содержимое в stdout. Также, возможно, не может использоваться с опцией -d(я не могу заставить его работать):

$ unzip -p datasets/youtube_videos.csv.zip videos_data.csv > target/youtube_videos.csv

Или, если внутри zip-архива только один файл, вы можете опустить имя сжатых файлов:

$ unzip -p datasets/youtube_videos.csv.zip > target/youtube_videos.csv

-pСогласно руководству, опция выполняет следующие действия:

-p извлечь файлы в конвейер (stdout). На stdout не отправляется ничего, кроме данных файла, и файлы всегда извлекаются в двоичном формате, как и хранятся (без преобразований).

решение2

С библиотекой bsdtar:

bsdtar -xvvf youtube_videos.csv.zip -C target -'s/videos_data/youtube_videos/g'

Извлечет архив в targetкаталог, videos_data sзаменив youtube_videosна имя участников архива.

(обратите внимание, что targetкаталог должен существовать заранее).

Связанный контент