如何在bash
ro 下发出命令删除当前目录中所有名称为 2 个字符的文件?
我已经尝试过我能想到的所有可能的组合:
rm -r ?? .
rm -r [??].
rm -r ??.
我没有列出我想到其他的,但是我这里没有想法了。
答案1
我在上面的评论中询问这是否是为了删除当前目录中或当前目录和子目录中的两个字符长度的文件名。我将在这里列出这两种解决方案:
删除当前目录中文件名长度为 2 个字符的文件
rm ??
要删除当前目录及其子目录中文件名长度为 2 个字符的文件:
find . -name '??' -exec rm -rf {} \;
这个有点棘手,因为在遍历子目录时文件名会采用路径。rm
我们不用尝试使用命令来解决这个问题,而是使用find
名称和 来??
作为 2 个字符的通配符,然后使用选项对找到的内容-exec
执行。rm
{}
答案2
使用find
with exec
。首先进行如下试运行,以确保您没有执行不想执行的操作:
find . -maxdepth 1 -type f -name '??' -exec ls -latr {} \;
然后,当您确信它按照您希望的方式工作时,运行以下命令:
find . -maxdepth 1 -type f -name '??' -exec rm -rf {} \;
另外,请注意maxdepth
。这将包含您对当前目录的操作。如果没有maxdepth
该find
命令,它将在您的整个系统中肆意运行,对两个字符的文件名进行任何操作。当然,增加maxdepth
以匹配您想要的任何深度,但请记住,如果您不使用它并find
在运行 之前对逻辑进行一些试运行测试,您将面临损坏系统的风险rm -rf
。
使用 GNU find(在大多数 Linux 发行版中),您还可以使用选项-delete
代替-exec rm -rf {} \;
。-delete
可能会更有效,因为它不需要调用外部命令,但它不是 POSIX 规范的一部分。