bash - 删除目录列表(包括其内容)

too*_*oop 2 unix linux bash shell scripting

以下脚本给出了以下错误:

rm: illegal option -- 4
rm: illegal option -- 5
rm: illegal option -- 4
rm: illegal option -- 3
rm: illegal option -- 2
Run Code Online (Sandbox Code Playgroud)

剧本:

#!/bin/bash
keep_no=$1+1
cd "/mydirec/"
rm -rf `ls | sort -nr | tail +$keep_no`
Run Code Online (Sandbox Code Playgroud)

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

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

53
92
8
152
77
Run Code Online (Sandbox Code Playgroud)

并且脚本被调用为:bash del.sh 2

那么/ mydirec /应该包含这些direc(因为它删除那些不是desc顺序的前2个):

152
92
Run Code Online (Sandbox Code Playgroud)

有人可以帮助解决语法问题吗?

onu*_*gör 5

应该读:

rm -rf `ls | sort -nr | tail -n +$keep_no`
Run Code Online (Sandbox Code Playgroud)

但是最好不要解析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 -
Run Code Online (Sandbox Code Playgroud)

  • @onurgüngör:只需使用`-mindepth 1`而不是`sed` (2认同)