Find

按修改時間排序文件

  • May 27, 2013

我在這裡看到了很多問題和答案,使用的結構類似於

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)匹配點文件。

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