`find | 时如何避免`ls .` xargs ls` 没有结果?

How to avoid `ls .` when `find | xargs ls` has no result?

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 .

GNU xargs-r 选项来避免在没有收到输入时做任何事情,但这不是可移植的。

使用find,解决方法很简单:使用-exec代替xargs


find /home/me/.config ! -user "me" -type f -exec ls -Al {} +

切向,don't use ls in scripts.

Xargs 支持选项 -r--no-run-if-empty。那么ls命令就不是运行什么都找不到了

请注意 find 支持选项 -ls。根据您想看的内容,您可以完全跳过 xargs

注意:假设是 GNU 环境。