![用一个命令解压缩并重命名文件](https://linux22.com/image/197933/%E7%94%A8%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%A7%A3%E5%8E%8B%E7%BC%A9%E5%B9%B6%E9%87%8D%E5%91%BD%E5%90%8D%E6%96%87%E4%BB%B6.png)
我有一个包含 CSV 的 zip 文件,我想将其解压缩到特定文件夹中,并将该文件重命名为与 zip 文件名相同的名称。例如。,
我有一个名为:youtube_videos.csv.zip 的 zip 文件,我想将其解压缩到名为 target 的某个文件夹,并将该文件夹中的文件重命名为 youtube-videos.csv。我有它,但分为两行,如下所示:
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 中只有一个文件,您可以省略压缩文件的名称:
$ 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
s
替换。youtube_videos
(注意该target
目录必须事先存在)。