【问题标题】:Having trouble writing a Bash script that checks if a directory is empty and deletes it if it is编写检查目录是否为空并删除它的 Bash 脚本时遇到问题
【发布时间】:2015-01-22 12:26:05
【问题描述】:

脚本正在搜索早于 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循环中。

【问题讨论】:

    标签: bash directory


    【解决方案1】:

    有点像

    while [ "$(ls -A $PFAD)" ]
    

    检查空目录的最简单方法

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

    【讨论】:

      【解决方案2】:

      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 旨在处理目录并且更适合该任务。不过,您可能应该注意测试.,以防您使用相对路径并且当前工作目录最终为空,并且可能是/。虽然,如果/ 最终为空,脚本将在无限的目录名循环成为问题之前遇到问题。

      【讨论】:

      • 谢谢伙计,我删除了 $ 符号并隐藏了错误消息,它现在可以工作了!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多