Re: [問題] 讓每個檔案的修改時間差一秒

作者: newversion (海納百川)   2016-07-11 01:34:05
※ 引述《LIAR (玻璃做的大叔)》之銘言:
: 我因為windows檔案管理的關係,有時要用檔名,有時要用時間排序,
: 因此新檔案進來後我會先丟到linux裡面用touch調整時間。
: 現在我希望讓大量檔案的mtime只差一秒,我想過
: find *.mp4 -exec touch {} \;
: mtime差距太短
: find *.mp4 -exec sleep 1 && touch {} \;
: 語法執行錯誤,exec後面不能接 && 或是 ; 啊??
: 請問這種有辦法用bash辦到嗎?
檔案多 sleep 你會等超久~~~~
bash 還有一招
time=`date +'%s'`
find /path -name '*.mp4' | while read f
do
touch -d "1970-01-01 00:00:00 ${time}sec GMT" "$f"
time=`expr $time + 1`
done
作者: kenduest (小州)   2016-07-11 01:38:00
裡面時間部分可以改成 let time++ 會比較快呼叫外部 expr 效率上太慢了.改用 time=$[time+1]也可
作者: newversion (海納百川)   2016-07-11 01:39:00
我是希望相容 sh, dash :-) (不知道sh有嗎?)
作者: kenduest (小州)   2016-07-11 01:46:00
是的,考慮相容性的確得這樣寫。不過你都說 bash 還有一招了 XD
作者: lantw44 (#######################)   2016-07-11 02:15:00
sh 有 time=$(( $time + 1 ))
作者: kenduest (小州)   2016-07-11 03:14:00
老實說還真是沒有研究太多純 sh 的語法到底支援到哪層級
作者: kerwinhui (kezza)   2016-07-11 12:02:00
POSIX2001的$((...))除了沒有++和--以外應該沒缺其他的
作者: kenduest (小州)   2016-07-11 19:10:00
其實我手上 bsd 的 server 我都裝 bash 與 ksh系統安裝好第一件事情,先改成 bash/ksh 當預設 shell不過算是 linux 經驗帶過去了。題外話用 `expr` 計算數值這個效率是真的不好若要重複跑大量的計算,改用其他方式會比較有效率提昇剛測試一下建立1000個檔案,用 expr 與內建計算語法5000 個檔案目錄會分別使用 45sec 與 22sec抱歉,是 5000 個檔案。不過檔案月少時間差距就越小
作者: danny8376 (釣到一隻猴子@_@)   2016-07-12 16:22:00
回樓上 還記得我為了方便連root也改bash結果某次更新系統lib大爆炸 連bash都死的時候整個(ry
作者: LIAR (玻璃做的大叔)   2016-07-17 09:51:00
感謝,版上兩種方法我都會研究,我對相容性高的也有需求

Links booklink

Contact Us: admin [ a t ] ucptt.com