Find

對 find -exec ls 的輸出進行排序

  • May 8, 2021

是否可以find … -exec ls -ls ;按文件名按字母順序排序的輸出?

這是我的 cron 命令:

find /home/setefgge/public_html -type f -ctime -1 -exec ls -ls {} \;

在大多數情況下,此命令可以正常工作。但是結果沒有按任何有意義的順序排序。如果它們按文件名欄位排序,那將非常有幫助。

我假設您的文件名不包含換行符。

find /home/setefgge/public_html -type f -ctime -1 -exec ls -nls {} + | sort -k 10

使用+而不是;終止-exec操作可以通過批量呼叫ls. 您可以通過sort命令通過管道進行排序;告訴它從第 10 個欄位開始排序(前 9 個是元數據:塊、權限、連結計數、使用者、組、大小和 3 個日期/時間欄位)。該選項-n告訴ls使用者和組使用數值,這避免了使用者或組名稱包含空格的風險。

或者,使用 zsh,您可以通過使用glob 限定符來收集和排序文件並在命令行太長時多次zargs執行,從而擺脫對任何名稱的假設。ls您確實需要 GNU ls(特別是它的-f選項)來避免重新排序ls(另一種方法是ls使用 zsh’s進行模擬zstat)。

autoload -U zargs
zargs -- /home/setefgge/public_html/**/*(.c-2) -- ls -lnsf

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