linux - 仅删除文件和提示目录

标签 linux bash shell rm

当我在 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/

相关文章:

linux - 在 Unix/macOS 系统事件上触发脚本

bash - 用于列出给定目录中的文件以及它们是文件还是目录的 Shell 脚本

bash - 在我的 ~/.bashrc 文件中创建 "local"别名后自动填充失败

linux - 在循环中运行命令而不每次都生成新的子 shell

linux - shell 脚本搜索并用日期替换字符串值

linux - 如何使用linux命令或bash脚本解析大量html文件

regex - 无法从文件中获取正确的输出

linux - 接受日期作为 bash 脚本中的用户输入

linux - x86 汇编 (Linux) stdin 读取系统调用返回 1,无数据输入

python - 如何使用python执行erlang命令