`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 {} +
Xargs 支持选项 -r
或 --no-run-if-empty
。那么ls
命令就不是运行什么都找不到了
请注意 find
支持选项 -ls
。根据您想看的内容,您可以完全跳过 xargs
。
注意:假设是 GNU 环境。
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 {} +
Xargs 支持选项 -r
或 --no-run-if-empty
。那么ls
命令就不是运行什么都找不到了
请注意 find
支持选项 -ls
。根据您想看的内容,您可以完全跳过 xargs
。
注意:假设是 GNU 环境。