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)
有人可以帮助解决语法问题吗?
应该读:
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)