Linux 如何限制查找结果的数量?
我想做一些类似的事情:Linux 如何限制查找结果的数量?,linux,bash,shell,find,Linux,Bash,Shell,Find,我想做一些类似的事情: find ./ -name "*.jpg" -nbresult 50 -exec cp {} /50randomsjpgfrommyharddrive 我可以使用head和xargs,但是使用-print0,head不再工作。如果文件名中没有换行符,-print0是不必要的,您可以改为: find ./ -name "*.jpg" | head -n 50 | xargs -d'\n' -n1 -I'{}' cp '{}' /50randomsjpgfrommyhard
find ./ -name "*.jpg" -nbresult 50 -exec cp {} /50randomsjpgfrommyharddrive
我可以使用
head
和xargs
,但是使用-print0
,head
不再工作。如果文件名中没有换行符,-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
如果文件名中没有换行符,
-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
GNU head有一个名为-z的选项,用于将行终止符更改为NUL,该选项可用于此任务,如下所示
find -name '*.jpg' -print0 \
| head -z -n 50 \
| xargs -0 cp -t /destination
GNU head有一个名为-z的选项,用于将行终止符更改为NUL,该选项可用于此任务,如下所示
find -name '*.jpg' -print0 \
| head -z -n 50 \
| xargs -0 cp -t /destination
head-z
是什么时候推出的?在coreutils 8.21(Ubuntu14.04LTS)中没有,尽管我看到8.28有它。@alaniwi Ubuntu14.04不再是LTS,它已经达到了它的EOL。我的coreutils版本是8.31,是什么时候推出的head-z
?在coreutils 8.21(Ubuntu14.04LTS)中没有,尽管我看到8.28有它。@alaniwi Ubuntu14.04不再是LTS,它已经达到了它的EOL。我的coreutils版本是8.31