如何删除文件名中带引号的文件

Rem*_*_me 3 bash shell

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

data.log".2015-01-22"
data.log".2015-01-23"
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时:

rm: cannot remove `data.log.2015-01-22': No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

所以是的,我如何删除这些包含"?

更新

虽然大多数答案都有效。我实际上是在尝试这样做:

ls | rm
Run Code Online (Sandbox Code Playgroud)

所以它对某些文件失败了。之后如何在管道中转义引号ls?大多数答案实际上解决了手动操作文件的问题。但我问的是ls.之后的转义/替换引号。对不起,如果我的问题令人困惑。

cho*_*oba 5

使用单引号来引用双引号或反斜杠:

rm data.log'"'*
rm data.log\"*
Run Code Online (Sandbox Code Playgroud)

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

回答更新后的问题:

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


Jen*_*ens 5

如果您只需要偶尔以交互方式执行此操作,请使用

rm -i -- *
Run Code Online (Sandbox Code Playgroud)

并回答y或n酌情。这可用于删除名称中包含有趣字符的许多文件。

它的优点是不需要输入/转义有趣的字符、空格等,因为 shell globbing*可以为您完成。它也尽可能短,所以很容易记住。