我编写了一个小的shell脚本来删除目录中的所有文件,除了少数文件。
#! /bin/ksh
logFile=/home/user/testscrpt/testlogfile.txt
echo "$logFile"
for rmdir in *
do
case "$rmdir" in
'rndp'|"$logFile"|'rndp1')
continue
;;
*)
if [ -d "$rmdir" ]
then
rm -rf "$rmdir"
elif [ -f "$rmdir" ]
then
rm -f "$rmdir"
fi
;;
esac
done
但是在执行脚本之后,我可以看到我不想删除的文件(/home/user/testscrpt/testlogfile.txt)也被删除了。 如果我在这里的脚本中有任何错误,请纠正我。
答案 0 :(得分:1)
$rmdir
的值不是绝对路径;它只包含基本名称testlogfile.txt
。
你首先需要chdir到目录:你不想开始递归删除错误的文件(我从这里的经验说)
#! /bin/ksh
cd /home/user/testscrpt
logFile=testlogfile.txt
for rmdir in *; do
case "$rmdir" in
rndp|"$logFile"|rndp1)
echo "keeping $rmdir"
continue
;;
*)
echo "deleting $rmdir"
rm -rf "$rmdir"
;;
esac
done
答案 1 :(得分:0)
UNTESTED:
pushd /home/user/testscript
ls -d * | egrep -v '^(rndp1*|testlogfile.txt)$' | xargs rm -rf
popd
你可能想要制作' ls ...'成功:
files_to_rm(){ls -d * | egrep -v' ^(rndp1 * | testlogfile.txt)$&#39 ;; }
所以它只是:
pushd /... ; files_to_rm | xargs rm -fr ; popd
我觉得在采取行动之前有一种显示清单的方法很有用。 任何可以避免生命伤害的方式都可以减轻痛苦。