0

我正在尝试删除目录中的文件。一些文件的名称有双引号,而另一些则没有。这些文件的一个示例是:
"DDD344".csv
D2DW.csv
这两个文件都位于目录中的子目录中YM

对于find这些文件并删除它们,我find这样调用:
find YM -name "*.csv" -print | xargs rm

上面的命令会导致很多No such file or directory错误。
我尝试通过sed以下方式使用:

find yum/yum_hyd -name "\"*\".csv" | sed 's/"/\"/g' | xargs rm
但无济于事。如何删除文件?

4

3 回答 3

3

问题是您正在使用xargs. xargs是一个非常糟糕的程序,除了与非标准-0选项一起使用外,绝不应该用于任何事情。即便如此,我想不出在这种情况下这样做有什么好处。您应该直接从 find 执行 rm。

find . -type f -name '"*".csv' -exec rm -f -- {} +

将工作。如果你有 GNU find,你也可以使用-delete.

于 2013-03-07T23:25:16.887 回答
1

试试这个:

find yum/yum_hyd -name "\"*\".csv" |sed 's/"/\\"/g'|xargs rm

解释:

你想"\". 但如果你\"直接写,sed 认为它是 plain ",你必须转义反斜杠。所以\\"有效。

于 2013-03-07T21:32:44.557 回答
1

直到最近我才知道这个选项,但您可以通过以下方式列出文件的 inode:

$ ls –il

在输出中,您将看到第一列包含 inode 值。然后,您可以将该值用于find -inum有问题的文件并将其删除。输出

2616366 -rw-r--r-- 1 等等

$ find . -inum 2616366 -exec rm -f {} \;

这将删除具有该特定 inum 的文件。

作为测试,您可以运行以下命令来定位您的文件。

ls -il \"* | awk '{print $1}' | xargs -n1 -I {} find -inum {}

满意后,用“rm”命令替换该命令的最后部分(“find -inum {}”)。

这也类似于SuperUser上的问题

于 2013-03-07T21:34:46.000 回答