У меня есть 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
каталог должен существовать заранее).