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