Descompacte e renomeie um arquivo em um comando

Descompacte e renomeie um arquivo em um comando

Eu tenho um arquivo zip que contém um CSV e gostaria de descompactá-lo em uma pasta específica e renomear o arquivo com o mesmo nome do arquivo zip. Por exemplo.,

Eu tenho um arquivo zip chamado: youtube_videos.csv.zip e gostaria de descompactá-lo em uma determinada pasta chamada target e renomear o arquivo nessa pasta para youtube-videos.csv. Eu tenho, mas em duas linhas como abaixo:

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

Existe um forro que poderia ser usado?

Responder1

Aqui está uma opção de um liner, mas ela não renomeia o arquivo, ela envia seu conteúdo para stdout. Talvez também não possa ser usado com a -dopção (não consigo fazer funcionar):

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

Ou se houver apenas um arquivo dentro do zip, você pode omitir o nome dos arquivos compactados:

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

A opção -pfaz, de acordo com o manual:

-p extrair arquivos para pipe (stdout). Nada além dos dados do arquivo é enviado para stdout, e os arquivos são sempre extraídos em formato binário, assim como são armazenados (sem conversões).

Responder2

Com libarchive bsdtar:

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

Extrairia o arquivo para o targetdiretório videos_data ssubstituído pelo youtube_videosnome dos membros do arquivo.

(observe que o targetdiretório deve existir previamente).

informação relacionada