1 つのコマンドでファイルを解凍して名前を変更する

1 つのコマンドでファイルを解凍して名前を変更する

CSV を含む zip ファイルがあり、それを特定のフォルダーに解凍し、ファイル名を zip ファイル名と同じ名前に変更したいと考えています。例:

youtube_videos.csv.zip という名前の zip ファイルがあり、それを target という特定のフォルダーに解凍し、そのフォルダー内のファイルの名前を youtube-videos.csv に変更したいと考えています。 次のように 2 行で変更します。

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

使用できるワンライナーはありますか?

答え1

これはワンライナーオプションですが、ファイルの名前を変更せず、その内容を標準出力に出力します。また、この-dオプションと一緒に使用できない可能性があります (動作させることができません)。

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

または、zip 内にファイルが 1 つしかない場合は、zip されたファイルの名前を省略できます。

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

-pマニュアルによると、オプションは次のようになります。

-p ファイルをパイプ (stdout) に抽出します。ファイル データ以外は stdout に送信されず、ファイルは常に保存されているとおりにバイナリ形式で抽出されます (変換なし)。

答え2

libarchive の場合bsdtar:

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

アーカイブ メンバーの名前が に置き換えられたtargetディレクトリにアーカイブを抽出します。videos_data syoutube_videos

(targetディレクトリが事前に存在している必要があることに注意してください)。

関連情報