`find | 时如何避免`ls.` xargs ls` 没有结果? [复制]
Posted
技术标签:
【中文标题】`find | 时如何避免`ls.` xargs ls` 没有结果? [复制]【英文标题】:How to avoid `ls .` when `find | xargs ls` has no result? [duplicate] 【发布时间】:2021-10-23 22:34:24 【问题描述】:me@new840:~/.config$ ls -al
total 196
drwx------ 40 me me 4096 Aug 22 22:08 .
drwxr-xr-x 52 me me 4096 Aug 22 12:12 ..
drwxr-xr-x 2 me me 4096 Jul 23 04:36 autostart
drwxr-xr-x 2 me me 4096 Jul 25 00:30 bcompare
drwx------ 20 me me 4096 Aug 22 22:37 Code
drwx------ 2 me me 4096 Aug 22 22:50 dconf
drwxr-xr-x 3 me me 4096 Aug 15 07:19 deadbeef
-rw------- 1 me me 1131 Nov 21 2016 dleyna-server-service.conf
me@new840:~/.config$ find /home/me/.config ! -user "me" -type f -print0 | xargs -0 ls -Al
total 188
drwxr-xr-x 2 me me 4096 Jul 23 04:36 autostart
drwxr-xr-x 2 me me 4096 Jul 25 00:30 bcompare
drwx------ 20 me me 4096 Aug 22 22:37 Code
drwx------ 2 me me 4096 Aug 22 22:56 dconf
drwxr-xr-x 3 me me 4096 Aug 15 07:19 deadbeef
-rw------- 1 me me 1131 Nov 21 2016 dleyna-server-service.conf
其实find /home/me/.config ! -user "me" -type f -print0 | xargs -0 ls -Al
的结果应该是empty
。
find | xargs ls
没有结果时如何避免ls .
?
【问题讨论】:
【参考方案1】:GNU xargs
具有 -r
选项,可以避免在未收到任何输入时执行任何操作,但这不是可移植的。
使用find
,解决方案很简单:使用-exec
而不是xargs
。
find /home/me/.config ! -user "me" -type f -exec ls -Al +
切线,don't use ls
in scripts.
【讨论】:
【参考方案2】:Xargs 支持选项-r
或--no-run-if-empty
。那么ls
命令在没有找到的时候就不会运行了。
请注意,find
支持选项 -ls
。根据您想看的内容,您可以完全跳过xargs
。
注意:假设 GNU 环境。
【讨论】:
以上是关于`find | 时如何避免`ls.` xargs ls` 没有结果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章