我之前以为rm命令会按照字母顺序删除文件,但是我的操作结果证明这并不正确。
那么,rm命令的执行顺序是什么呢?
我之前以为rm命令会按照字母顺序删除文件,但是我的操作结果证明这并不正确。
那么,rm命令的执行顺序是什么呢?
提供排序特性的不是rm
本身,而是shell扩展功能。如果您键入rm *
,则shell会将其扩展为类似以下内容:
rm aaa bbb ccc
而 rm
永远不会看到 *
参数。顺便说一下,尽管我不能确定所有 shell 都保证 sorted 行为,但对于 bash
,它肯定是符合文档的:
……用匹配模式的按字母顺序排序的文件名列表替换。
命令 rm -rf *
是一个稍微奇怪的混合情况,因为即使 shell 对 *
条目进行了排序,那也只针对第一级条目。
因此,rm -rf *
可能会被展开为:
rm -rf aa_dir bb_dir cc_dir
但是对于rm
内部处理目录和文件的顺序,完全取决于它的工作方式,虽然很明显,在删除目录本身之前,该目录下的所有条目都将被删除,这是一个安全的保证。
很可能只是使用readdir()
或类似的东西,根据在目录“文件”中存储的方式进行排序。
无论如何,它们被删除的顺序可能并不重要 - 在权限允许的情况下,它们最终都将被删除。