`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` 没有结果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

linux xargs命令一(与find ls等命令组合)(转)

xargs参数代换

xargs 原理&使用

xargs 原理&使用

linux中批量删除带空格的文件

Linux Shell常用技巧 find xargs