spe*_*.sm 0 command-line ls files 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
Run Code Online (Sandbox Code Playgroud)
运行上面的命令并运行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
Run Code Online (Sandbox Code Playgroud)
为命令提供参数不保证执行顺序吗?如果没有,我如何按特定顺序更新这些文件的时间戳?
在没有指定touch时间的情况下,将其所有参数的时间戳更改为触摸每个文件时的当前时间,这应该为每个文件生成不同的时间戳,但在许多情况下,这最终会对其所有参数应用相同的时间戳;您可以通过stat在所有触及的文件上运行来验证这一点。它们按照命令行上指定的顺序进行处理。
为了得到你想要的结果,你需要touch单独循环每个文件,有一些延迟:
for file in {1..12}.txt; do touch $file; sleep 0.1; done
Run Code Online (Sandbox Code Playgroud)
(或多或少的延迟取决于底层文件系统的时间戳分辨率)。
请注意,ls -t列出按降序时间戳排序的文件;看到你需要使用的次数越来越多ls -rt。