嗨,大家请帮忙...
[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中的这些文件。
答案 0 :(得分:1)
命令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/'{}' \;
答案 1 :(得分:0)
你为什么要通过
ls -l
使用just,它会找到大于给定大小的文件列表, 如果您在文件中获得此列表,则可以获取要删除的文件列表或其他
find /vol/cdr/MCA -type f -size +56320c -exec ls '{}' \;
答案 2 :(得分:0)
> `ls -lrth | head -n $count | xargs rm -rf`
这一行存在多个问题。反引号是多余的,您传递目录权限,文件大小,所有者信息等,就好像它是实际文件名的一部分。
最小修复方法是丢失反引号,将-l
选项丢失到ls
(顺便提一下,-r
的{{1}}选项看起来也不合适了);但实际上,一个正确的解决方案根本不会使用rm
。