使用Bash查明目录中是否包含任何文件?

时间:2013-10-19 00:26:49

标签: linux bash

我正在编写一个简单的Bash脚本,需要找出目录中有多少文件。基本上,如果目录不包含任何文件,脚本将退出。如果有,它会做其他事情。

如何使用Bash查看目录中是否有文件?

谢谢!

4 个答案:

答案 0 :(得分:1)

列出几乎(编号或..)所有文件和目录并计算行:ls -A1 /mydir | wc -l

如果你只想要文件,我认为你可以使用find代替:find /mydir -maxdepth 1 -type f | wc -l

答案 1 :(得分:0)

shopt -s nullglob
cd /path/to/dir/
arr=( * )
echo "${#arr[@]}"
for i in "${!arr[@]}"; do echo "${arr[i]}"; done

答案 2 :(得分:0)

其他答案向您展示了获取文件数量的方法。以下是如何在脚本中使用该数字。

(这是在函数的上下文中显示的,其中$1是运行时指定的目录名。要在当前目录中使用它,只需省略它,或者您可以在目录名中硬连线那个位置。)

checkdir(){
    numfiles=$(ls -A "$1" | wc -l)

    if [ $numfiles -gt 0 ]
    then
       echo YES;
    else
       echo NO;
    fi
}

注意:这会将目录计为文件。如果您只想 文件,请用此行替换ls...wc部分:

ls -AF "$1" | grep -v "/$" | wc -l

答案 3 :(得分:0)

昨天我需要同样的东西,found this(它靠近页面底部):

# From http://www.etalabs.net/sh_tricks.html
is_empty () (
  cd "$1"
  set -- .[!.]* ; test -f "$1" && return 1
  set -- ..?* ; test -f "$1" && return 1
  set -- * ; test -f "$1" && return 1
  return 0 )

它与POSIX兼容,并使用三种模式匹配除...以外的任何文件名,这些文件名保证存在于其他空目录中。

前两行匹配以单个.(长度至少为2)或一个或多个.(长度至少为3)开头的所有文件,其中包含所有隐藏文件't ...。第三种模式匹配所有非隐藏文件。

请注意,函数的主体是(...)表达式,而不是{...}。这会强制子shell,在其中可以安全地更改工作目录以简化模式。