当我在 Linux 机器上删除许多过时的文件树时,我想知道是否有一种简单的方法可以递归删除文件,同时只在目录上提示。
我可以使用 rm -ri
但是有很多文件,要对每个文件进行回答真的很烦人。对我来说真正重要的是提示文件夹以更好地控制发生的事情。
我不是 bash 专家,所以我想问一下是否有一种简单的方法可以做到这一点。
这是我对长 bash 脚本的尝试:
#!/bin/bash
promptRemoveDir()
{
fileCount=$(ls -1 $1 | wc -l)
prompt=1
while [ $prompt == 1 ]
do
read -p "remove directory: $1($fileCount files) ? [yl]: " answer
case $answer in
[yY])
rm -r $1
prompt=0
;;
l)
echo $(ls -A $1)
;;
*)
prompt=0
;;
esac
done
}
removeDir()
{
if [ "$(ls -A $1)" ]
then dirs=$(find $1/* -maxdepth 0 -type d)
fi
if [[ -z $dirs ]]
then
promptRemoveDir $1
else
for dir in $dirs
do
removeDir $dir
done
promptRemoveDir $1
fi
}
for i in $*
do
if [ -d $i ]
then
removeDir $i
else
rm $i
fi
done
最佳答案
如果我正确理解你的问题,这应该有效
Dirs=$(find . -type d)
只删除指定目录中的文件
for i in "$Dirs"; do read -p "Delete files in "$i": ";if [[ $REPLY == [yY] ]]; then find $i -maxdepth 1 -type f | xargs -0 rm ; fi ;done
如果你也想删除文件夹,这将从最低目录(下面没有目录)向上读取。
for i in $(echo "$Dirs" | sed '1!G;h;$!d' ); do read -p "Delete files in $i: ";if [[ $REPLY == [yY] ]]; then rm -r "$i"; fi ;done
关于linux - 仅删除文件和提示目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24281941/