编写用于检查目录是否为空的Bash脚本时遇到问题,如果是,则删除它

时间:2015-01-22 12:26:05

标签: bash directory

脚本正在搜索早于x的文件,将文件和父目录复制到新目录中,如果源文件为空,则删除源文件+目录。如果它是空的,它将变为上面的目录并再次检查。

复制文件和目录是有效的,同时删除文件也有效,但检查目录是否为空则不会,它们只是保持空白。

#!/bin/bash
SOURCE=/root/Desktop
DESTINATION=/Backup
find $SOURCE -type f -amin +1 -exec ./move_file.sh {} $DESTINATION \;

move_file.sh

#!/bin/bash
PFAD=`dirname $1`
mkdir -p $2$PFAD
cp $1 $2$1
rm $1
while [ `ls -a $PFAD | wc -l` -le 2 ]
do
echo $PFAD ist leer und wird gelöscht
rmdir $PFAD
$PFAD=`echo $PFAD | rev | cut -d/ -f2- | rev`
done

问题应该在while循环中。

2 个答案:

答案 0 :(得分:1)

这样的东西
while [ "$(ls -A $PFAD)" ]

检查空目录的最简单方法

[ "$(ls -A /x/y/z)" ] && echo "Is Not Empty" || echo "Is Empty"

答案 1 :(得分:0)

rmdir不会删除不为空的目录,因此您可以一次性检查和删除

while rmdir "$PFAD" 2>/dev/null; do
  echo "$PFAD ist leer und wird gelöscht"
  PFAD="$(dirname "$PFAD")"
done

如果目录不为空且2> /dev/null拒绝删除它,rmdir会禁止显示错误消息。

请注意

开头的美元符号
$PFAD=`echo $PFAD | rev | cut -d/ -f2- | rev`

是一个问题,它将命令的输出分配给以$PFAD的内容命名的变量。它可以通过删除美元符号来解决,但dirname旨在处理目录并更适合任务。您应该注意测试.,但是如果您使用相对路径并且当前工作目录最终为空,可能/。虽然,如果/结束为空,则在无限目录名循环成为问题之前,脚本将遇到麻烦。