Bash 删除名称中带有双引号的文件

Bash 删除名称中带有双引号的文件,bash,Bash,我正在尝试删除目录中的文件。一些文件的名称周围有双引号,而其他文件则没有。这些文件的一个例子是: “DDD344”.csv D2DW.csv 这两个文件都位于目录YM中的子目录中 为了查找这样的文件并删除它们,我调用查找如下: 查找YM-名称“*.csv”-打印| xargs rm 上述命令导致大量无此类文件或目录错误。 我尝试了以下方式使用sedsed: 查找yum/yum\u hyd-name“\”*\”.csv“| sed's/“/\”/g'| xargs rm 但是没有用。如何删除文件?

我正在尝试删除目录中的文件。一些文件的名称周围有双引号,而其他文件则没有。这些文件的一个例子是:
“DDD344”.csv

D2DW.csv

这两个文件都位于目录
YM
中的子目录中

为了
查找
这样的文件并删除它们,我调用
查找
如下:
查找YM-名称“*.csv”-打印| xargs rm

上述命令导致大量
无此类文件或目录
错误。
我尝试了以下方式使用sed
sed

查找yum/yum\u hyd-name“\”*\”.csv“| sed's/“/\”/g'| xargs rm

但是没有用。如何删除文件?

尝试以下操作:

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

您想将
替换为
\”
。但是如果您直接编写
\”
,sed会将其视为普通的
,您必须避开反斜杠。所以
\\“
有效。

试试这个:

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


你想用
\“
替换
。但是如果你直接写
\“
,sed认为它是普通的
,你必须避开反斜杠。因此
\“
可以工作。

我直到最近才意识到这个选项,但是你可以用以下方式列出文件的inode:

$ls–il

在输出中,您将看到第一列包含inode值。然后可以使用该值
查找-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{}”)


这也类似于

上的问题,直到最近我才意识到这个选项,但您可以用以下方式列出文件的inode:

$ls–il

在输出中,您将看到第一列包含inode值。然后可以使用该值
查找-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{}”)


这与

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

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

会有用的。如果您有GNU find,您也可以使用
-delete

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

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

会有用的。如果您有GNU find,您也可以使用
-delete

对sed表达式中的双“\”进行解释。在您的示例中,sed命令实质上是将“a”替换为“a”。在本例中,sed操作是将“a”替换为“a”因为错误的答案掩盖了错误的一些症状,比根本没有答案更糟糕。如果给出了错误的文件名,这可能会很容易崩溃。@Ormaj,文件名不是由您给出的,它们是由OP编码的。请参阅问题。。。根据您的逻辑,以您的答案为例,如果给出了“错误”的文件名,例如
“*”.css
,则所有css文件都将被删除。。但是谁能控制呢?任何文件名都不可能影响我回答的结果,但无论如何,问题并没有指定只处理遵循该格式的文件。即使有,也没关系。编写依赖于文件名正常的脆弱代码是没有意义的,因为始终遵循良好的实践非常容易。请解释sed表达式中的双“\”。在您的示例中,sed命令实际上是将“a”替换为“a”。在本例中,sed操作是将“a”替换为“a”因为错误的答案掩盖了错误的一些症状,比根本没有答案更糟糕。如果给出了错误的文件名,这可能会很容易崩溃。@Ormaj,文件名不是由您给出的,它们是由OP编码的。请参阅问题。。。根据您的逻辑,以您的答案为例,如果给出了“错误”的文件名,例如
“*”.css
,则所有css文件都将被删除。。但是谁能控制呢?任何文件名都不可能影响我回答的结果,但无论如何,问题并没有指定只处理遵循该格式的文件。即使有,也没关系。编写依赖于文件名的脆弱代码是没有意义的,因为始终遵循良好的实践非常容易。这个问题已经被问过很多次了,你必须努力避免找到答案。这也是离题的。这个问题已经被问了很多次了,你必须努力避免找到答案。这也是离题的。