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