脚本正在搜索早于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循环中。
答案 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
旨在处理目录并更适合任务。您应该注意测试.
,但是如果您使用相对路径并且当前工作目录最终为空,可能/
。虽然,如果/
结束为空,则在无限目录名循环成为问题之前,脚本将遇到麻烦。