假设我有一些list.txt
文件想要检查。
cat list.txt
对于每个文件,我想执行一个操作
cat list.txt | xargs -I {} touch {}
但根据行动的结果,我希望做出相应的反应:
cat list.txt | xargs -I {} touch {} | if [-z - ]; then echo "blank file"; fi;
这不能正常工作,我也不知道为什么...那么,我怎样才能正确地测试stdout
-?-的值?并且,作为奖励,我怎样才能将的内容传递{}
给最后一部分?效果如下:
cat list.txt | xargs -I {} touch {} | if [-z - ]; then echo "{} is a blank file"; fi;
也许这应该是一个完整的 bash 脚本,但我更希望能够用一行代码学会如何完成这个脚本,因为它的应用在很多方面都很有用——
这是一个更实际的例子:
time john -incremental -stdout | grep 'clientsWeakPassword' | if [ ! -z - ]; then exit 0;
因此,该脚本将随机生成密码,并在遇到指定的密码时停止,并显示“破解”该密码所花费的时间......
理想情况下,它还会输出类似“‘clientsWeakPassword’ 花费 X 分钟随机猜测破解”的内容——
但是,这个链也可以用于检查日志文件中的某些内容,等等,等等 -
无论如何,我希望有人能给我指明正确的方向。
非常感谢 -
答案1
如果你想做多件事,可以生成一个 shell:
xargs -t sh -c '
for f; do
touch "$f"
[ -s "$f" ] || echo "$f is zero size or does not exist"
done
' - < list.txt
但是此时,您不妨使用while read
循环而不是 xargs。