touch 命令参数的执行顺序

touch 命令参数的执行顺序

我有一个以空格分隔的文件列表,我想使用该touch命令按顺序更新它们的时间戳。但是当我提供文件名作为参数时,时间戳会以不同的顺序更新。

touch 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt 10.txt 11.txt 12.txt 

运行上面的命令并运行ls -t(按修改时间排序)后,我得到以下信息:

1.txt 10.txt 11.txt 12.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt

向命令提供参数是否不能保证执行顺序?如果没有,我如何按特定顺序更新这些文件的时间戳?

答案1

如果没有指定时间,touch则将其所有参数的时间戳更改为触摸每个文件时的当前时间,这应该为每个文件生成不同的时间戳,但在许多情况下,这最终会对其所有参数应用相同的时间戳;您可以通过运行stat所有触及的文件来验证这一点。它们按照命令行上指定的顺序进行处理。

为了获得您想要的结果,您需要touch单独循环每个文件,并有一些延迟:

for file in {1..12}.txt; do touch $file; sleep 0.1; done

(或多或少的延迟取决于底层文件系统的时间戳分辨率)。

请注意,ls -t列出的文件按时间戳降序排序;查看您需要使用的次数增加ls -rt

答案2

也许这有点麻烦,但如果是在脚本中,我会使用 for 循环。

前任:

for x in 1.txt 2.txt 3.txt 4.txt [as many as you want here]; do touch $x; done

这将导致它们始终按照给定的顺序创建。当然,您可以将名称更改为任何名称,而不遵循任何模式。如果您要创建具有相同名称或数字模式的文件(如示例中所示),我会这样做:

for x in $(seq 1 10); do touch $x.txt; done

相关内容