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。

命令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

相关内容

  • 没有找到相关文章

最新更新