我有一个包含数千个具有以下模式的文件的文件夹: YYYYMMDD_HH24MISS_4DIGITSEQUENCE。
例子:20180626_210123_0001
。
现在,例如,当我通过
rm -f *20180626_1*
命令删除时,它工作正常。
我的问题是: 1. 首先删除哪个文件? 2. 是随机抽取的吗? 3. 如果它在选择时保持某种顺序,那么它会选择哪一个以及如何决定?
答案1
shell 按字典顺序(在当前语言环境中)扩展 Glob,其rm
实现是可能以按照获取文件的相同顺序删除作为参数获取的文件。因此,在您的情况下,文件将从最旧的开始被删除。
对 glob 结果进行排序POSIX 要求。在快速测试中,至少 GNU rm 会按列出的顺序删除命令行上给出的文件,并且不会对递归操作期间找到的文件进行排序。
答案2
shell 在执行之前会扩展表达式rm
,并且该扩展并不特定于该命令,因此如果您这样做:
echo *20180626_1*
那么第一个 echo 的东西将是 shell 传递给的第一个东西rm
。顺序不是随机的,而是按字母顺序排列的。从 bash 手册页:
分词后,除非设置了 -f 选项,否则 bash 会扫描每个单词中的字符 *、? 和 [。如果出现这些字符之一,则该单词被视为一种模式,并替换为与该模式匹配的按字母顺序排序的文件名列表。