【发布时间】:2012-04-14 00:16:35
【问题描述】:
我正在尝试通过 bash shell for 循环删除歌曲,但要删除这样的文件
while read item; do rm "$item"; done < duplicates
不断关注歌曲名称。有可能解决这个问题吗?我的歌曲名称可能如下所示:
/home/user/Music/Master List's Music/iTunes/iTunes\ Music/John\ Mayer/Room\ for\ Squares\ \[Aware\]/07\ 83.m4a
/home/user/Music/Master List's Music/bsg\ season\ 1\ \(Case\ Conflict\ 1\)/06\ A\ Good\ Lighter.mp3
/home/user/Music/Master List's Music/Nino\ Rota/The\ Godfather\ Pt.\ 3/14\ A\ Casa\ Amiche.m4a
如您所见,为了删除一个项目,我可以没有 %.()[] 或其他任何内容而不会被转义,除非它是 .在文件扩展名之前。有没有办法可以转义这样的特殊字符?
例如,我使用 sed 将 %20 转换为空格:
cat duplicates | sed 's/%20/\\ /g' > clean_duplicates
我正在寻找的输出如下所示:
/home/user/Music/Master\ List\'s\ Music/iTunes/iTunes Music/John\ Mayer/Room\ for\ Squares\ \[Aware\]/07\ 83.m4a
/home/user/Music/Master\ List\'s\ Music/bsg\ season\ 1\ \(Case\ Conflict\ 1\)/06\ A\ Good\ Lighter.mp3
/home/user/Music/Master\ List\'s\ Music/Nino\ Rota/The Godfather\ Pt\.\ 3\/14\ A\ Casa\ Amiche.m4a
【问题讨论】:
-
你能确定
foo%20bar和foo bar这两个文件真的是重复的吗? IE。完全相同的文件,这样您就可以自信地吹走foo%20bar而不会丢失任何东西? -
或者你是说重复文件包含百分比编码的名称,但文件系统中的文件没有这样的名称?
-
@Kaz,一个可靠的问题...我正在使用 Banshee 的 banshee.db 文件,该文件已经为所有内容编制索引,而我列出的那些文件名实际上是包含所有曲目的表中的 URI。
标签: shell command-line sed