正如其他人所指出的那样,这不是一个准确的方法来计算你的文件的数量。它会计算包含换行符的文件,并且可能有其他问题。 然而,这是一个非常好的方法来计算ls
将打印的行数,如果它们太多,就不会显示它们,这是您大概试图做的。
因此,要回答你的一般性问题,使一个命令依赖于他人的结果,你可以使用
command1 && command2
一个将运行command2
只有command1
成功。如果你想只有当第一的成绩通过一些测试要执行的第二,你可以使用:
[ command1 ] && command2
对于你的榜样,这将是:
[ $(ls | wc -l) -gt 100 ] && echo too many
再次重,如果测试执行ls
被传递,使用
[ $(ls | wc -l) -gt 100 ] && echo too || ls
或
if [ $(ls | wc -l) -gt 200 ]; then echo 'too many files!'; else ls; fi
但是,所有这些都不雅观,因为它们需要运行两次命令。一个更好的办法可能是,一旦运行该命令,它的输出保存到一个变量,然后测试变量:
x=$(ls); [ $(wc -l <<<"$x") -gt 100 ] && echo 'too many!' || printf "%s\n" "$x"
这里,ls
输出保存在变量$x
,则该变量作为输入到wc
,如果它有超过100行,则会打印一条消息。否则,变量是。
为了完整起见,这里是另一种安全的方法,将正确计算文件:
[ $(find -maxdepth 1 | grep -cF './') -gt 100 ] && echo 'too many!' || ls