我正在编写一个简单的Bash脚本,需要找出目录中有多少文件。基本上,如果目录不包含任何文件,脚本将退出。如果有,它会做其他事情。
如何使用Bash查看目录中是否有文件?
谢谢!
答案 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,在其中可以安全地更改工作目录以简化模式。