命令行 - 在if then else语句中,如何检查文件夹是否为空?

分享于 

2分钟阅读

ubuntu

  繁體

问题:

需要检查文件夹是否为空,并根据输出运行一些其他命令,

bash脚本:


if [ "$(ls -A /mnt/mamdrive/"As Metadata"/)" ] || ["$(ls -A /mnt/mamdrive/"As Video"/)" ]; then


 echo "copy file"


else


 echo "dont copy"


fi



是否有其他方法来检查目录是否为空,并相应地执行一些操作?


答案1:

我建议不要依赖于ls的字符串输出


#!/bin/bash



shopt -s nullglob # don't return literal glob if matching fails


shopt -s dotglob # make * match "almost all" like ls -A



set -- /mnt/mamdrive/"As Metadata"/*



if (( $# > 0 )); then


 echo "not empty"


else


 echo "empty"


fi



如果想测试两个目录是否都是空的,你可以简单地将这两个目录组合起来:


set -- /mnt/mamdrive/"As Metadata"/* /mnt/mamdrive/"As Video"/*




答案2:

最简单的方法是在ls -A语句中使用if,如下所示:


path=$(ls -A '/whatever/sub directory/more spaces')


if [[ ! -z "$path" ]]; then


 echo "Directory is NOT empty!"


else


 echo "Directory is empty!"


fi




答案3

$ find test/ -maxdepth 0 -empty | ifne cp -t test/ a



在if语句中使用,它可以如下所示:


#!/bin/bash



if find test/ -maxdepth 0 ! -empty | ifne false; then


 echo Directory is empty


else


 echo Directory is not empty


fi




答案4

由于ls解析很容易出错,因此应该首选其他解决方案。还可以使用find来完成:


if [[ "$(find '/mnt/mamdrive/As Metadata' '/mnt/mamdrive/As Video' -maxdepth 1 -mindepth 1 2>/dev/null)" ]]


then


 echo"copy file"


else


 echo "don't copy"


fi




COM  STA  COMM  STAT  Comma  命令行