如何删除文件名以报价文件(how to delete a file with quote in fi

2019-11-03 14:45发布

当我做ls在我的目录,得到这些一堆:

data.log".2015-01-22"
data.log".2015-01-23"

然而,当我这样做:

rm: cannot remove `data.log.2015-01-22': No such file or directory

如果我能以某种方式做一些线ls | escape quotes | xargs rm ls | escape quotes | xargs rm

所以呀,我怎么删除包含这些文件"

更新

虽然大多数的答案的工作。 实际上,我是想这样做:

ls | rm

因此,它是失败的一些文件。 我怎样才能逃脱后在管报价ls 。 大部分的答案居然解决了文件,它的工作原理的手动操作。 但我问的是转义/后更换报价ls 。 很抱歉,如果我的问题是混淆

Answer 1:

使用单引号引用的双引号或反斜线:

rm data.log'"'*
rm data.log\"*

否则,双引号被shell解释,并从字符串中删除。

回答到更新的问题:

不处理的输出ls 。 文件名可以包含空格,换行等。



Answer 2:

你可以做这样的。

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


Answer 3:

逃生用单引号报价

$ touch '"  and spaces also "'
$ ls
"  and spaces also "
$ rm '"  and spaces also "'
$ ls
$

你的情况:

$ rm 'data.log".2015-01-22"' 'data.log".2015-01-23"'


Answer 4:

ls | rm

不起作用,因为rm获取文件的命令行参数删除,而不是从标准输入。 您可以使用xargs的标准输入转换为参数。

ls | xargs -d '\n' rm

但只是删除你想要的文件,引用包含单引号名称的一部分:

rm 'data.log"'.*


Answer 5:

1 - 建议 - 修改工具与他们的报价创建文件名... :)

试着一点点野生焦炭魔法-用您所选择的工具,即我将使用tr

ls | escape quotes | xargs rm  ## becomes something like:  
ls | tr "[\",']" '?' | xargs rm ## does not work on my system but this does:
rm -v $(ls *sing* *doub* | tr "[\",']" '?')

输出是:

removed `"""double"""'
removed `\'\'\'single\'\'\''

现在:

$ touch "'''single'''" '"""double"""'
$ ls -l *sing* *doub*
-rw-rw-r-- 1 dale dale 0 Feb 15 09:48 """double"""
-rw-rw-r-- 1 dale dale 0 Feb 15 09:48 '''single'''

如果你的模式是一致的其他方式可能是简化:

$ rm -v *sing* *doub*
removed `\'\'\'single\'\'\''
removed `"""double"""'

为了您的例子:

rm -v data.*${YEAR}-${MONTH}-${DAY}*  ## data.log".2015-01-22"  OR
rm -v data.*${YEAR}-${MONTH}-${DAY}?  ## data.log".2015-01-22"


Answer 6:

如果你只需要在一段时间曾经这样做交互,使用

rm -i -- *

并回答y或n为适当。 这可以用来摆脱在他们的名字奇怪的字符许多文件。



文章来源: how to delete a file with quote in file name
标签: bash shell