我有一个包含大约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
中命名的文件上运行答案 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