嗨,伙计们请帮忙...
[root@uenbe1 ~]# cat test.sh
#!/bin/bash
cd /vol/cdr/MCA
no='106'
value='55'
size=`df -kh | grep '/vol/cdr/MCA' | awk '{print $5}'| sed 's/%//g'`
if [ "$size" -gt "$value" ] ;
then
delete=$(($size-$value))
echo $delete
count=$(($no*$delete))
`ls -lrth | head -n $count | xargs rm -rf`
fi
输出:
+ cd /vol/cdr/MCA
+ no=106
+ value=55
++ df -kh
++ grep /vol/cdr/MCA
++ awk '{print $5}'
++ sed s/%//g
+ size=63
+ '[' 63 -gt 55 ']'
+ delete=8
+ echo 8
8
+ count=848
++ ls -lrth
++ head -n 848
++ xargs rm -rf
rm: invalid option -- 'w'
Try `rm --help' for more information.``
我想删除这些文件,其中在$count。
命令ls -lrth
打印如下行:
-rw-r--r-- 1 bize bize 0 may 22 19:54 text.txt
-rw-r--r-- 1 bize bize 0 may 22 19:54 manual.pdf
提供给命令rm
的文本将被解释为选项
$ rm -rw-r text.txt
rm: invalid option -- 'w'
仅列出文件名。即:从ls中删除长-l
选项(以及-h
选项,因为它仅适用于-l
):
$ ls -1rt | head -n "$count" | xargs
但是请:不要使rm -rf
自动,这是通往未来问题的必经之路。
或?:
$ ls -1rt | head -n "$count" | xargs -I{} echo rm -rf /vol/cdr/MCA/'{}' ;
你为什么要通过
ls -l
使用JUST,它将找到大于给定大小的文件列表,如果您在文件中获取此列表,则可以获取要删除的文件列表或其他任何内容
find /vol/cdr/MCA -type f -size +56320c -exec ls '{}' ;
> `ls -lrth | head -n $count | xargs rm -rf`
这条线有多个问题。反引号是多余的,您传递的是目录权限、文件大小、所有者信息等,就好像它们是实际文件名的一部分一样。
最小的解决方法是丢失反引号和-l
选项来ls
(顺便说一下,rm
-r
选项看起来也放错了地方);但实际上,一个正确的解决方案根本不会在这里使用ls
。