使用管道在命令 2 中重用命令 1 的输出

使用管道在命令 2 中重用命令 1 的输出

我在 Linux 中有一个命令,它返回一个数字列表。现在我需要这些数字来形成目录路径并捕获位于该路径的文件。例如:myCommand 返回:

1 
10
30 
40

我想捕获所有看起来像这样的文件:

 /folder/1/folder2 
 /folder/10/folder2 
 /folder/30/folder2
 /folder/40/folder2

我希望我清楚我想要什么,如果没有,请随时询问。这是我现在的代码:

 myCommand | xargs cat

但它显然不起作用,因为目录 1,10,30 和 40 不存在。

我希望输出为:catted 值 - myCommand 生成的数字

答案1

做事情没有问题xargs

myCommand | xargs -I{} sh -c 'echo -n {}\ ; cat /folder/{}/folder2/file'

但使用for循环在语法上更正确且更灵活:

for genpath in $(myCommand)
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done

或者甚至通过while循环

while read genpath
do
    echo -n $genpath\ 
    cat /folder/$genpath/folder2/file
done < <(myCommand)

答案2

您可以使用-Iwithxargs替换命令中的占位符:

myCommand | xargs -I % cat /folder/%/folder2

答案3

您可以尝试使用带有括号列表扩展的命令替换:

cat /folder/["$(myCommand)"]/folder2

printf作为命令的示例:

$ mkdir dir1 dir2 dir3
$ echo a > dir1/file
$ echo b > dir2/file
$ echo c > dir3/file
$ cat ./dir["$(printf "%s\n" {1..3})"]/file
a
b
c

相关内容