Bash脚本在文件中收到错误

时间:2016-05-22 13:56:34

标签: bash

嗨,大家请帮忙...

[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中的这些文件。

3 个答案:

答案 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