使用终端将多个特定文件解压缩到一个目录中?

使用终端将多个特定文件解压缩到一个目录中?

我最近在我的笔记本电脑上安装了 Linux Mint 17。我以前使用过 Windows 7,并将所有数据备份到外部硬盘上。 Windows 7 将所有备份数据塞入大量 .zip 文件夹中。这是我的问题:我只想提取包含我的音乐的那些文件夹,这些文件夹位于路径C:\...\Username\Music....因此,我尝试找到一种方法,使用终端将这些文件从外部硬盘驱动器解压到我的主文件夹中的音乐目录中。我仍在学习如何使用终端,但这是我发现的:

for file in *.zip; do unzip -c "$file" -d "/~/Music" | grep "\Username\Music"; done

它给了我输出:

caution:  not extracting; -d ignored

当我删除 时-d,它起作用了(嗯,似乎起作用了:它运行了一段时间),但最后我得到了一个奇怪的输出,然后是:

62;9;c62;9;c62;9;c62;9;c

我搜索了据说已解压的音乐,但找不到。谁能告诉我是否以及如何实现我的目标?我只想将我的音乐文件从外部硬盘解压到我的音乐文件夹。

答案1

unzip 的标志-c意味着将文件提取到标准输出/屏幕,因此实际上没有文件写入磁盘,因此该-d选项毫无意义 - 它也可以解释您在终端中看到的奇怪字符。也许您正在考虑-C使用不区分大小写的匹配) 修饰符?

grep您可能想要的是提供一个而不是使用要处理的档案成员的可选列表/紧随 zip 文件:即使 zip 文件的来源是 Windows 系统,您也可能需要使用 Unix 样式的路径分隔符。

最后,“/~/Music”可能会被解释为字面绝对路径;您可能需要~/Music/or "$HOME/Music/"- 后一种形式更容易修改为其中包含空格的目标目录,例如"$HOME/My Music/"

unzip -C "$file" '*/Username/Music/*' -d "$HOME/Music/"

但请注意,这可能会产生类似 的文件夹结构~/Music/Username/Music/somefile,这可能不是您想要的。 AFAIKunzip没有像某些实现那样灵活地删除前导目录组件tar,但是您可能希望查看-j修饰符。

相关内容