【问题标题】:How to avoid `ls .` when `find | xargs ls` has no result? [duplicate]`find | 时如何避免`ls.` xargs ls` 没有结果? [复制]
【发布时间】:2023-03-10 15:35:01
【问题描述】:
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 .

【问题讨论】:

    标签: bash find ls xargs


    【解决方案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 环境。

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 1970-01-01
        • 2020-05-29
        • 2012-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多