将 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
我希望将 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