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文件都将被删除。。但是谁能控制呢?任何文件名都不可能影响我回答的结果,但无论如何,问题并没有指定只处理遵循该格式的文件。即使有,也没关系。编写依赖于文件名的脆弱代码是没有意义的,因为始终遵循良好的实践非常容易。这个问题已经被问过很多次了,你必须努力避免找到答案。这也是离题的。这个问题已经被问了很多次了,你必须努力避免找到答案。这也是离题的。