Find
按修改時間排序文件
我在這裡看到了很多問題和答案,使用的結構類似於
list_dir=`ls -t /path/to/dir/` for i in $list_dir; do
或者
ls -t | while read i; do
現在,我知道您不應該在腳本中使用 ls ,因為它很容易損壞;但我找不到更好的方法來按從最後修改到最近修改(反之亦然)的順序對文件進行操作。
我可以使用類似的東西:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
…但這仍然會與名稱中包含換行符的任何文件中斷,並且啟動起來更加難看。有沒有更好的辦法?
“不要在腳本中使用 ls”是 POSIX ls “only”的問題;對於 GNU,請參見
--quoting-style=
.GNU sort 用
--zero-terminated
.如果它必須兼容,那麼您可以使用
find ... -exec
一次將一個文件名傳遞給執行轉義的腳本。如果至少 bash 可用:start cmd:> testfunc () { echo "${1//$'\n'/\n}"; } start cmd:> testfunc a$'\n'b a\nb
到目前為止,最簡單的方法是使用 zsh。glob 限定符
om
按時間倒序對匹配進行排序;用於Om
時間順序。for x in /path/to/dir/*(Nom); do …
如果目錄為空,
N
則 glob 限定符會導致模式擴展為空列表。使它*(DNom)
匹配點文件。