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用户的说明
尝试如下循环:
##代码##