将 find 命令输出与另一个命令输出合并并重定向到文件

merge find command output with another command output and redirect to file

我希望将 Linux find 和 head 命令的输出(导出文件名列表)与另一个 Linux/bash 命令的输出结合起来,并将结果保存在一个文件中,这样"find" 中的每个文件名与另一个命令输出一起出现在单独的行上。

例如, - 如果目录 testdir 包含文件 a.txt、b.txt 和 c.txt, - 另一个命令的输出是某个数字,比如 10,我正在寻找的所需输出是

10 a.txt
10 b.txt
10 c.txt 

在这里搜索时,我看到有人建议 paste 进行类似的合并,但我不知道在这种情况下该怎么做,因为 paste 似乎需要 files 。我试过了

paste  $(find testdir -maxdepth 1 -type f -name "*.text" | head -2) $(echo "10") >  output.txt
paste: 10: No such file or directory

如有任何关于我做错了什么的指示,我将不胜感激。也欢迎任何其他实现相同目标的方法。

请注意,如果我想让所有内容都显示在同一行,我可以使用 xargs 来完成工作。

$find testdir -maxdepth 1 -type f -name "*.text" | head -2 |xargs echo "10" >  output.txt

$cat output.txt
10 a.txt b.txt

但我的要求是如前所示合并两个命令输出。

在此先感谢您的帮助!

试试这个,

$find testdir -maxdepth 1 -type f -name "*.text" | head -2 |tr ' ' '\n'|sed -i 's/^/10/' >  output.txt

find 可以同时处理 -exec-print 指令,你只需要合并输出:

$ find . -maxdepth 1 -type f -name \*.txt -exec echo hello \; -print | paste - -
hello   ./b.txt
hello   ./a.txt
hello   ./all.txt

假设您的 "command" 需要文件名(这是一个非常人为的示例):

$ find . -maxdepth 1 -type f -name \*.txt -exec sh -c 'wc -l <""' _ {} \; -print | paste - -
4   ./b.txt
4   ./a.txt
7   ./all.txt

当然是对每个文件执行命令。为了限制我自己的问题:

cmd_out=$(echo 10)
for file in *.txt; do
    echo "$cmd_out $file"
done

您可以使用 -L1 使 xargs 一次在一行上运行:

find testdir -maxdepth 1 -type f -name "*.text" | xargs -L1 echo "10" >  output.txt