从文本文件中的列表中删除文件

时间:2017-03-08 15:13:02

标签: unix delete-file rm

我有一个包含大约500行的文本文件。每一行都是文件的绝对路径。我想使用脚本删除这些文件。

有一个建议here,但我的文件中有空格。他们已经被public class SQLServerUUIDType extends AbstractSingleColumnStandardBasicType<UUID> implements LiteralType<UUID> { public static final SQLServerUUIDType INSTANCE = new SQLServerUUIDType(); public SQLServerUUIDType() { super( VarcharTypeDescriptor.INSTANCE, UUIDTypeDescriptor.INSTANCE ); } @Override protected boolean registerUnderJavaType() { return true; } public String getName() { return "my-uuid"; } public String objectToSQLString(UUID value, Dialect dialect) throws Exception { return StringType.INSTANCE.objectToSQLString( value.toString(), dialect ); } } 对待以逃离这个空间,但它仍然无法正常工作。关于白色空间的问题,但没有解决方案,就该主题进行了讨论。

我不能简单地使用\命令,因为它不能给我准确的结果,我需要使用列表(通过运行find创建并编辑消除差异)。

编辑:一些上下文。我注意到iTunes已经重新下载并复制了多首歌曲,并将它们放在与原始歌曲相同的目录中,例如,在特定的专辑目录中是这样的歌曲。和&#39; 01这首歌1.aac&#39;。

我跑了find来生成一个文本文件,所有歌曲都匹配&#34; * 1。*&#34;获得以1结尾但任何文件类型的歌曲。我在iTunes Media / Music目录中运行了它。

文件中包含的部分歌曲中的数字为1但实际上并不重复(环境受害者),因此我手动将其删除。

我剩下的文件大约有500行,所有歌曲都包含文件名中的空格。因为它是一个iTunes问题,一个目录中只有几首歌曲,然后是另一个目录中的更多歌曲,然后是另一个,等等 - 我不能只在一个目录上运行脚本,它有以递归方式工作并仅在我的list.txt

中命名的文件上运行

2 个答案:

答案 0 :(得分:1)

要删除名称中包含空格的文件,您只需将整个路径包装在引号中即可 要删除文件列表,我建议您更改文件的每一行,使其看起来像rm。最快的方法是使用sed。因此,如果您的文件采用以下格式:

/home/path/file name.asd
/opt/some/string/another name.wasd
...

oneliner就是这样的:

sed -e 's/^/rm -f "/' file.txt | sed -e 's/$/" ;/' > newfile.sh

首先sed替换rm -f "行的开头,第sed行的末尾" ;

它将生成包含以下内容的文件:

rm -rf "/home/path/file name.asd" ;
rm -rf "/opt/some/string/another name.wasd" ;
...

因此,您只需将此文件作为bash脚本执行即可。

答案 1 :(得分:1)

正如您所料,诀窍在于引用正确:

while read line; do rm "$line"; done < filename