使用 stdout 的 `if` 语句 && 通过管道传递 xargs

使用 stdout 的 `if` 语句 && 通过管道传递 xargs

假设我有一些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。

相关内容