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

看板Linux作者 (海納百川)時間8年前 (2016/07/11 01:34), 8年前編輯推噓0(0019)
留言19則, 6人參與, 最新討論串3/3 (看更多)
※ 引述《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 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.150.169.155 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1468172048.A.8FF.html

07/11 01:38, , 1F
裡面時間部分可以改成 let time++ 會比較快
07/11 01:38, 1F

07/11 01:38, , 2F
呼叫外部 expr 效率上太慢了.改用 time=$[time+1]也可
07/11 01:38, 2F

07/11 01:39, , 3F
我是希望相容 sh, dash :-) (不知道sh有嗎?)
07/11 01:39, 3F

07/11 01:46, , 4F
是的,考慮相容性的確得這樣寫。
07/11 01:46, 4F

07/11 01:48, , 5F
不過你都說 bash 還有一招了 XD
07/11 01:48, 5F

07/11 02:15, , 6F
sh 有 time=$(( $time + 1 ))
07/11 02:15, 6F

07/11 03:14, , 7F
老實說還真是沒有研究太多純 sh 的語法到底支援到哪層級
07/11 03:14, 7F

07/11 12:02, , 8F
POSIX2001的$((...))除了沒有++和--以外應該沒缺其他的
07/11 12:02, 8F
玩BSD就得被迫用純sh寫 bash的好處是多功能,又能向下相容 要寫跨平台的script 所以考慮相容性比較好^^ ※ 編輯: newversion (118.150.169.155), 07/11/2016 16:13:31

07/11 19:10, , 9F
其實我手上 bsd 的 server 我都裝 bash 與 ksh
07/11 19:10, 9F

07/11 19:10, , 10F
系統安裝好第一件事情,先改成 bash/ksh 當預設 shell
07/11 19:10, 10F

07/11 19:11, , 11F
不過算是 linux 經驗帶過去了。
07/11 19:11, 11F

07/11 19:13, , 12F
題外話用 `expr` 計算數值這個效率是真的不好
07/11 19:13, 12F

07/11 19:13, , 13F
若要重複跑大量的計算,改用其他方式會比較有效率提昇
07/11 19:13, 13F

07/11 19:16, , 14F
剛測試一下建立1000個檔案,用 expr 與內建計算語法
07/11 19:16, 14F

07/11 19:19, , 15F
5000 個檔案目錄會分別使用 45sec 與 22sec
07/11 19:19, 15F

07/11 19:20, , 16F
抱歉,是 5000 個檔案。不過檔案月少時間差距就越小
07/11 19:20, 16F

07/12 16:22, , 17F
回樓上 還記得我為了方便連root也改bash
07/12 16:22, 17F

07/12 16:22, , 18F
結果某次更新系統lib大爆炸 連bash都死的時候整個(ry
07/12 16:22, 18F

07/17 09:51, , 19F
感謝,版上兩種方法我都會研究,我對相容性高的也有需求
07/17 09:51, 19F
文章代碼(AID): #1NWeSGZ_ (Linux)
文章代碼(AID): #1NWeSGZ_ (Linux)