无法编写 Bash 脚本来检查目录是否为空,如果为空则将其删除
Having trouble writing a Bash script that checks if a directory is empty and deletes it if it is
脚本正在搜索早于 x 的文件,将文件和父目录复制到新目录并删除源文件 + 目录(如果它是空的)。如果为空,则换成上面的dir再检查。
复制文件和目录有效,删除文件也有效,但检查目录是否为空则无效,它们只是保持为空。
#!/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 `
mkdir -p $PFAD
cp
rm
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 循环中。
rmdir
不会删除不为空的目录,所以您可以用
一次完成检查和删除
while rmdir "$PFAD" 2>/dev/null; do
echo "$PFAD ist leer und wird gelöscht"
PFAD="$(dirname "$PFAD")"
done
如果目录不为空并且 rmdir
拒绝删除它,2> /dev/null
会抑制您收到的错误消息。
注意
开头的美元符号
$PFAD=`echo $PFAD | rev | cut -d/ -f2- | rev`
是一个问题,因为它将命令的输出分配给以 $PFAD
的内容命名的变量。它可以通过删除美元符号来解决,但是 dirname
用于处理目录并且更适合该任务。不过,您可能应该注意测试 .
,以防万一您使用相对路径并且当前工作目录最终为空,并且可能 /
。虽然,如果 /
最终为空,脚本将 运行 在无限目录名循环成为问题之前陷入困境。
类似于
while [ "$(ls -A $PFAD)" ]
检查空目录的最简单方法
[ "$(ls -A /x/y/z)" ] && echo "Is Not Empty" || echo "Is Empty"
脚本正在搜索早于 x 的文件,将文件和父目录复制到新目录并删除源文件 + 目录(如果它是空的)。如果为空,则换成上面的dir再检查。
复制文件和目录有效,删除文件也有效,但检查目录是否为空则无效,它们只是保持为空。
#!/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 `
mkdir -p $PFAD
cp
rm
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 循环中。
rmdir
不会删除不为空的目录,所以您可以用
while rmdir "$PFAD" 2>/dev/null; do
echo "$PFAD ist leer und wird gelöscht"
PFAD="$(dirname "$PFAD")"
done
如果目录不为空并且 rmdir
拒绝删除它,2> /dev/null
会抑制您收到的错误消息。
注意
开头的美元符号$PFAD=`echo $PFAD | rev | cut -d/ -f2- | rev`
是一个问题,因为它将命令的输出分配给以 $PFAD
的内容命名的变量。它可以通过删除美元符号来解决,但是 dirname
用于处理目录并且更适合该任务。不过,您可能应该注意测试 .
,以防万一您使用相对路径并且当前工作目录最终为空,并且可能 /
。虽然,如果 /
最终为空,脚本将 运行 在无限目录名循环成为问题之前陷入困境。
类似于
while [ "$(ls -A $PFAD)" ]
检查空目录的最简单方法
[ "$(ls -A /x/y/z)" ] && echo "Is Not Empty" || echo "Is Empty"