Linux rm -rf * 删除命令?
Linux rm -rf * delete orders?
我以为 rm 会按字母顺序删除文件,但显然不是在我执行之后。
那么,rm命令的执行顺序是怎样的?
提供排序性质的不是 rm
本身,而是 shell 扩展。如果您输入 rm *
,shell 会将其扩展为:
rm aaa bbb ccc
和 rm
永远不会 看到 一个 *
论点。顺便说一句,虽然我不确定 all shells 的排序行为是否得到保证,但根据文档,它肯定适用于 bash
:
... replaced with an alphabetically sorted list of filenames matching the pattern.
命令 rm -rf *
是一个有点奇怪的混合案例,因为即使 shell 对 *
条目进行排序,它仍然只针对第一级条目。
因此 rm -rf *
可能扩展为:
rm -rf aa_dir bb_dir cc_dir
但这完全取决于 rm
在内部如何处理条目 在 这些目录下的顺序,但显然,这是一个安全的赌注目录中的条目将在目录本身之前被删除。
它很可能只是使用 readdir()
或类似的东西,它会根据它们在目录 "files" 中的存储方式而不是某些字母顺序来排序。
无论如何,它们的删除顺序可能无关紧要 - 如果权限允许,它们最终都会被删除。
我以为 rm 会按字母顺序删除文件,但显然不是在我执行之后。
那么,rm命令的执行顺序是怎样的?
提供排序性质的不是 rm
本身,而是 shell 扩展。如果您输入 rm *
,shell 会将其扩展为:
rm aaa bbb ccc
和 rm
永远不会 看到 一个 *
论点。顺便说一句,虽然我不确定 all shells 的排序行为是否得到保证,但根据文档,它肯定适用于 bash
:
... replaced with an alphabetically sorted list of filenames matching the pattern.
命令 rm -rf *
是一个有点奇怪的混合案例,因为即使 shell 对 *
条目进行排序,它仍然只针对第一级条目。
因此 rm -rf *
可能扩展为:
rm -rf aa_dir bb_dir cc_dir
但这完全取决于 rm
在内部如何处理条目 在 这些目录下的顺序,但显然,这是一个安全的赌注目录中的条目将在目录本身之前被删除。
它很可能只是使用 readdir()
或类似的东西,它会根据它们在目录 "files" 中的存储方式而不是某些字母顺序来排序。
无论如何,它们的删除顺序可能无关紧要 - 如果权限允许,它们最终都会被删除。