Command-Line

觸摸命令參數的執行順序

  • August 8, 2017

我有一個以空格分隔的文件列表,我想使用該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

為命令提供參數不能保證執行順序嗎?如果沒有,我如何按特定順序更新這些文件的時間戳?

在沒有指定touch時間的情況下,將其所有參數的時間戳更改為每個文件被觸摸時的目前時間,這應該為每個文件生成不同的時間戳,但在許多情況下,這最終會對其所有參數應用相同的時間戳;stat您可以通過在所有接觸的文件上執行來驗證這一點。它們按照命令行上指定的順序進行處理。

為了得到你想要的結果,你需要touch單獨循環和每個文件,有一些延遲:

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

(或多或少的延遲取決於底層文件系統的時間戳解析度)。

請注意,ls -t列出的文件按時間戳降序排列;看到你需要使用的次數越來越多ls -rt

引用自:https://unix.stackexchange.com/questions/384766