在 find 命令中使用文件而不是目录

在 find 命令中使用文件而不是目录

我正在对数组中存储的多个目录使用 find 命令,fdir以对每个文件执行 head。我如何调整代码以使用 中的文件fdir

nf=${#fdir[@]}
for (( i=0 ; i < $nf ; i++ )); do
  find "${fdir[$i]}" -type f \
    -exec head -v -n "$hn" '{}' + 
done

答案1

GNU 命令的概要find如下

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]

其中[starting-point...]是零个或多个路径。这可能不是很高效,但没有什么可以阻止你传递文件作为起点,例如:

$ cat subdir/somefile
foo
bar
baz

然后

$ find subdir/somefile -type f -exec head -n 2 {} +
foo
bar

另外,没有必要将命令限制在一个起点 -除非你的数组足够大,超出了内核的ARG_MAX限制1,所以你可能只需这样做

find "${fdir[@]}" -type f -exec head -v -n "$hn" '{}' +

无论 中的目录和文件如何混合fdir。请注意,如果fdir同时包含文件及其包含目录,则会出现重复,例如:

$ fdir=(subdir subdir/somefile)

$ find "${fdir[@]}" -type f -exec head -n 2 {} +
==> subdir/somefile <==
foo
bar

==> subdir/somefile <==
foo
bar

  1. 例如CP:复制实用程序的最大源文件数参数

相关内容