对 find -exec ls 的输出进行排序

MaJ*_*MaJ 15 ls find sort

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

这是我的 cron 命令:

find /home/setefgge/public_html -type f -ctime -1 -exec ls -ls {} \;
Run Code Online (Sandbox Code Playgroud)

大多数情况下,此命令可以正常工作。但是结果没有按任何有意义的顺序排序。如果它们按文件名字段排序,那将非常有帮助。

Gil*_*il' 15

我假设您的文件名不包含换行符。

find /home/setefgge/public_html -type f -ctime -1 -exec ls -nls {} + | sort -k 10
Run Code Online (Sandbox Code Playgroud)

使用+而不是;终止-exec操作可以通过批处理ls. 您可以通过sort命令管道进行排序;告诉它从第 10 个字段开始排序(前 9 个是元数据:块、权限、链接计数、用户、组、大小和 3 个日期/时间字段)。该选项-n告诉ls对用户和组使用数值,这避免了用户或组名称包含空格的风险。

或者,使用 zsh,您可以通过使用glob 限定符来收集和排序文件并在命令行太长时多次zargs运行而无需假设任何名称ls。您确实需要 GNU ls(特别是它的-f选项)以避免重新排序ls(另一种方法是ls使用 zsh进行模拟zstat)。

autoload -U zargs
zargs -- /home/setefgge/public_html/**/*(.c-2) -- ls -lnsf
Run Code Online (Sandbox Code Playgroud)