如何在文件数组上使用xargs

时间:2016-06-23 08:14:10

标签: arrays linux bash

我想将find命令输出存储在变量中,并且当find命令消耗时间时多次使用它。

abc=`find . -maxdepth 3 -type f -name "abc.txt"`

echo "${abc[*]}" | xargs grep -l "somestring1"
echo "${abc[*]}" | xargs grep -l "somestring2"
echo "${abc[*]}" | xargs grep -l "somestring3"

但它只对数组abc的第一个元素进行grept。

1 个答案:

答案 0 :(得分:4)

由于您使用的是非标准-maxdepth,我假设处理find谓词的非标准-print0,以便安全地构建阵列

abc=()
while IFS= read -r -d '' f; do
    abc+=( "$f" )
done < <(find . -maxdepth 3 -type f -name "abc.txt" -print0)

你有一个数组 abc

现在,您可以安全地将数组abc作为参数传递给grep

grep -l "somestring1" "${abc[@]}"
grep -l "somestring2" "${abc[@]}"
grep -l "somestring3" "${abc[@]}"

注1。在您的代码中,abc不是数组。

注2。我不知道为什么你说你的代码不起作用......它应该有用(前提是你有很好的文件名,没有空格和引号);也许你没有显示完整的代码?