【问题标题】:bash - delete list of directories (including their contents)bash - 删除目录列表(包括它们的内容)
【发布时间】:2012-02-12 06:32:12
【问题描述】:

下面的脚本给出了这个错误:

rm: illegal option -- 4
rm: illegal option -- 5
rm: illegal option -- 4
rm: illegal option -- 3
rm: illegal option -- 2

脚本:

#!/bin/bash
keep_no=$1+1
cd "/mydirec/"
rm -rf `ls | sort -nr | tail +$keep_no`

我希望脚本接受一个参数(要保留的 direc 数量)然后删除所有目录(包括它们包含的文件),除了(在脚本中传递的数字 - 按数字 direc 名称降序排列) .

即如果 /mydirec/ 包含这些 direc 名称:

53
92
8
152
77

脚本被称为:bash del.sh 2

然后 /mydirec/ 应该包含这些 direc(因为它会删除那些不是按 desc 顺序排在前 2 位的目录):

152
92

有人可以帮忙看看语法吗?

【问题讨论】:

    标签: linux bash shell unix scripting


    【解决方案1】:

    应阅读:

    rm -rf `ls | sort -nr | tail -n +$keep_no`
    

    但最好不要解析 ls 输出。请改用 find。

    #!/bin/bash
    keep_no=$(( $1+1 ))
    directory="./mydirec/"
    cd $directory
    rm -rf `find . -maxdepth 1 -mindepth 1 -type d -printf '%f\n'| sort -nr | tail -n +$keep_no`
    cd -
    

    【讨论】:

    • 这个 find 命令只会找到目录 AND* 它也会找到当前目录 .
    • 该问题仅询问目录名称。你的另一点是对的。我更新了它。现在用 sed 删除当前目录。
    • 虽然 OP 似乎正在使用 ls 命令删除文件和目录。
    • OP 会意外删除文件,但 OP 声明需要删除目录(“即,如果 /mydirec/ 包含这些目录名称”)。我认为“onur gungor”是对的。 (对不起,美国只有 alpha 字符)。祝大家好运。
    • @shellter - 如问题中所述:'删除所有目录(包括它们包含的文件)'
    【解决方案2】:
    #!/bin/bash
    if [[ -z "$1" ]]; then 
       echo "syntax is..."
       exit 1
    fi
    keep_no=$(( $1 + 1 ))
    cd "/mydirec/"
    IFS='
    ';    # record separator: only enter inside single quotes
    echo rm -rf $(ls | sort -nr | tail +$keep_no)
    

    手动验证脚本的输出,然后通过sh执行脚本:

    ./your_script.sh | sh -x
    

    【讨论】:

      【解决方案3】:

      如果你想留下两个目录(不删除)你需要计算目录的总数。而xargs 实用程序是将参数列表传递给rm 的更方便的方法。

      #!/bin/bash
      dir="/yourdir"
      total_no=`ls | wc -l`
      keep_no=$(( $total_no - $1 ))
      ls | sort -nr | tail -n $keep_no | xargs rm -rf
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-04
        • 2022-01-05
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 2011-02-15
        • 1970-01-01
        • 2012-07-08
        相关资源
        最近更新 更多