Bash Shell检查目录是否为空

时间:2020-01-09 10:42:22  来源:igfitidea点击:

如何使用Shell脚本在Linux/UNIX下检查目录是否为空?如果目录在Linux或者Unix之类的系统上为空,如何采取一些措施。如何从bash/ksh Shell脚本检查目录中是否包含文件?如何检查目录是否为空?在Linux和Unix bash shell下,有很多方法可以确定目录是否为空。您可以使用find命令仅列出文件。 在此示例中,find命令将仅打印/tmp中的文件名。
如果没有输出,则目录为空。

使用find命令检查目录是否为空

基本语法如下:

find /dir/name -type -f -exec command {} \;

或者GNU/BSD find命令语法:

find /path/to/dir -maxdepth 0 -empty -exec echo {} is empty. \;

或者

find/path/to/dir -type d -empty -exec command1 arg1 {} \;

在此示例中,检查名为/tmp /的目录是否为空,执行:

$ find "/tmp" -type f -exec echo Found file {} \;

但是,最简单,最有效的方法是将ls命令与-A选项一起使用:

$ [ "$(ls -A /path/to/directory)" ] && echo "Not Empty" || echo "Empty"

或者

$ [ "$(ls -A /tmp)" ] && echo "Not Empty" || echo "Empty"

您可以在shell程序脚本中使用if..else.fi:

#!/bin/bash
FILE=""
DIR="/tmp"
# init
# look for empty dir 
if [ "$(ls -A $DIR)" ]; then
     echo "Take action $DIR is not Empty"
else
    echo "$DIR is Empty"
fi
# rest of the logic

这是另一个使用bash for循环检查~/projects /目录中任何* .c文件的示例:

# Bourne/bash for loop example 
for z in ~/projects/*.c; do
        test -f "$z" || continue
        echo "Working on $z C program..."
done

只使用bash检查文件夹/data /是否为空

选项说明

  • nullglob如果设置,bash允许不匹配文件的模式扩展为空字符串,而不是扩展为它们自己。
  • dotglob如果设置,bash包含以。开头的文件名。扩展路径名的结果。
#!/bin/bash
# Set the variable for bash behavior
shopt -s nullglob
shopt -s dotglob
 
# Die if dir name provided on command line
[[ $# -eq 0 ]] && { echo "Usage: 
$ ./script.sh /tmp
Files found in /tmp directory.
$ mkdir /tmp/foo
$ ./script.sh /tmp/foo
Directory /tmp/foo/ is empty.
dir-name"; exit 1; }   # Check for empty files using arrays chk_files=(/*) (( ${#chk_files[*]} )) && echo "Files found in directory." || echo "Directory is empty."   # Unset the variable for bash behavior shopt -u nullglob shopt -u dotglob

输出示例:

## In ksh93, prefix ~(N) in front of the pattern
## For example, find out if *.mp4 file exits or not in a dir
cd $HOME/Downloads/music/
for f in ~(N)*.mp4; do
        # do something if file found
        echo "Working on $f..."
done

关于ksh用户的说明

尝试如下循环:

##代码##