rm 按字母顺序工作吗?

rm 按字母顺序工作吗?

我在rm *中断之前意外运行了一个文件夹中的许多文件。

看起来以 a、b 和 c 开头的文件不见了,但我不确定,因为我不知道所有文件的名称。

我是否可以依靠按rm字母顺序排列的方式准确地知道哪些文件已被删除?

答案1

rm不一定按字母顺序工作,而是按您提供其参数的顺序工作(使用-r它变得更加复杂,但这在这里并不重要)。如果您完全按照您所说的编写,将按*字母顺序扩展到所有文件名。

所以是的,您已按字母顺序删除文件。

尝试执行

echo *

在目录中查看内容显示的顺序。这与rm *删除文件的顺序相同。

答案2

是的,它们按字母顺序排列。

您可以使用 strace 命令检查序列以及内核内部的工作方式。下面是我用于 rm 命令的 strace 命令,它将 * 转换为字母序列。

[电子邮件保护]:〜/ scripts / temp / temp $ strace rm -rf *

execve("/bin/rm", ["rm", "-rf", "a.txt", "b.txt", "c.txt", "d.txt"], [/* 43 变量 */]) = 0

<--我已经剪辑了输出-->

无论哪里有 *,您的 bash shell 都会尝试按此顺序给出所有组合。支持此功能的其他一些命令是 cp、mv、find 等。

相关内容