使用模式匹配删除包含空格和星号的文件

使用模式匹配删除包含空格和星号的文件

由于程序无法正常运行,我的主目录中有许多文件以点开头,并包含奇怪的符号,其中包括空格和星号。我想删除这些文件,但执行起来遇到困难。这个问题类似于重命名包含空格和标点符号的文件,但更糟糕。有太多文件需要手动删除,因此我必须使用模式匹配。

大多数文件以 开头.txt}并包含18Jun22h(并且我想要保留的目录中没有文件包含这些字符串中的任何一个)。鉴于目录中的文件肯定不是很好的 unix 名称,如何删除包含此字符串的所有文件?相反,它们包含点、空格、星号、方括号和破折号。我最初的尝试失败可能是由于这些名称中存在这些符号。

由于文件数量太多,任何将它们一一删除的方法对我来说都是完全没有用的。


是的,我知道最好不要有不符合 UNIX 标准的文件。这也是我赖以生存的准则。但脚本并没有发挥应有的作用。


再想一想,删除特定时间之间生成的所有文件(在特定目录中)可能会更容易。因此,我们非常感谢您提供这方面的帮助。


系统:Fedora 27

我曾尝试过, ~/*18Jun22h*但认为说参数太长的错误与文件名中的 * 扩展和做一些奇怪的事情有关。相反,这只是因为有太多文件匹配此模式(对吗?)。 (我不知道 rm 可以处理的文件数量有上限)。

答案1

要在主目录(仅)中查找至少包含一个空格的文件:

find "$HOME" -maxdepth 1 -type f -name '*[ ]*'

...至少包含一个*

find "$HOME" -maxdepth 1 -type f -name '*[*]*'

...至少包含[]

find "$HOME" -maxdepth 1 -type f -name '*[\[\]]*'

...包含上述任何一项:

find "$HOME" -maxdepth 1 -type f -name '*[ *\[\]]*'

要删除这些文件,请添加-delete到命令末尾,或添加-exec rm {} +.


find在不支持的系统上-maxdepth 1,从主目录运行:

find . -type d ! -name . -prune -o -type f -name '*[ *\[\]]*' -print

答案2

由于没有一个.txt}对于 shell 来说是特殊的(没有左大括号),所以简单地:

rm ~/.txt}* ~/*18Jun22h*

或者如果太多,则将其拆分:

rm ~/.txt}*
rm ~/*18Jun22h*

答案3

您可以输入和输出报价。

例如要删除以 开头的文件*,然后执行

rm "*"*

echo先练习一下echo "*"*

答案4

方式一:使用./

rm -f ./'file name'rm -f ./'file*name'

方式二:使用索引节点:

获取索引节点ls

ls -i "file name"

然后

find . -inum "numberoofinode" -exec rm {} \;

相关内容