![在 find 命令中使用文件而不是目录](https://linux22.com/image/947037/%E5%9C%A8%20find%20%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E6%98%AF%E7%9B%AE%E5%BD%95.png)
我正在对数组中存储的多个目录使用 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