【问题标题】:How to limit the number of results from find?如何限制查找结果的数量?
【发布时间】:2020-06-15 05:11:26
【问题描述】:

我想做这样的事情:

find ./ -name "*.jpg" -nbresult 50 -exec cp {} /50randomsjpgfrommyharddrive

我可以使用headxargs,但是对于-print0head 不再起作用了。

【问题讨论】:

    标签: linux bash shell find


    【解决方案1】:

    如果文件名中没有换行符,-print0 是不必要的,您可以使用:

    find ./ -name "*.jpg" | head -n 50 | xargs -d'\n' -n1 -I'{}' cp '{}' /50randomsjpgfrommyharddrive
    

    在此命令中,-d'\n' 将使xargs 分隔换行符。文件名中的其他空格(默认情况下会被xargs 视为分隔符)不会成为问题。

    或者,如果您仍需要使用-print0,则以下命令行包含一个类似于head -n 50 的过滤器,但在其输入和输出上基于空分隔符(而不是换行符)。请注意,在这种情况下,xargs 需要 -0

    find ./ -name "*.jpg" -print0 | perl -p0e 'exit if $i++ == 50' | xargs -0 -n1 -I'{}' cp '{}' /50randomsjpgfrommyharddrive
    

    【讨论】:

      【解决方案2】:

      GNU head 有一个名为 -z 的选项,用于将行终止符更改为 NUL,可用于此任务,如下所示。

      find -name '*.jpg' -print0 \
      | head -z -n 50 \
      | xargs -0 cp -t /destination
      

      【讨论】:

      • head -z 是什么时候引入的?不在 coreutils 8.21 (Ubuntu 14.04LTS) 虽然我看到 8.28 有它。
      • @alaniwi Ubuntu14.04 不再是 LTS,它已达到 EOL。我的 coreutils 版本是 8.31
      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 2012-02-12
      • 2011-05-12
      • 2019-11-09
      相关资源
      最近更新 更多