我在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 等。