我试图连续发送一些命令;它只能使用一个文件,但是一旦我同时尝试多个文件,就会给我一个错误。
在我的工作文件夹中的单个文件上:
find . -type f -iname "summary.5runs.*" -print0 | xargs -0 cut -f1-2 | head -n 2
#It works
现在,我要扫描工作文件夹所有子目录中名称中带有特定前缀/后缀的所有文件,然后将结果写入文本文件
find . -type f -iname "ww.*.out.txt" -print0 | xargs -0 cut -f3-5 | head -n 42 > summary.5runs.txt
#Error: xargs: cut: terminated by signal 13
我想我的问题是要反复浏览多个文件,但是我不确定该怎么做。
答案 0 :(得分:1)
最后的head
在总输出42行之后停止,但是您希望每个文件都可以使用它。您可以使用xargs
中的一个子外壳来轻描淡写:
xargs -0 -I{} bash -c 'cut -f3-5 "$1" | head -n 42' _ {} > summary.5runs.txt
或者您可以将其作为-exec
动作的一部分:
find . -type f -iname "ww.*.out.txt" \
-exec bash -c 'cut -f3-5 "$1" | head -n 42' _ {} \; > summary.5runs.txt
或者,您可以循环遍历子shell中的所有文件,因此只需要生成一个即可:
find . -type f -iname "ww.*.out.txt" \
-exec bash -c 'for f; do cut -f3-5 "$f" | head -n 42; done' _ {} + \
> summary.5runs.txt
通知{} +
而不是{} \;
。