用于删除小于x kb的文件的Shell脚本

时间:2015-01-05 22:49:11

标签: linux bash file shell scripting

我试图找出如何编写一个小脚本来删除小于50千字节的文本文件,但我没有成功。

我的尝试看起来像这样:

#!/bin/bash
for i in *.txt
do
   if [ stat -c %s < 5 ]
   then
     rm $i
   fi
done

我会赞美一些指导,谢谢!

2 个答案:

答案 0 :(得分:10)

您可以使用find选项直接使用size

find /your/path -name "*.txt" -size -50k -delete
                              ^^^^^^^^^^
                              if you wanted bigger than 50k, you'd say +50

您可能希望坚持使用当前目录中的文件,而不是在目录结构中。如果是这样,你可以说:

find /your/path -maxdepth 1 -name "*.txt" -size -50k -delete

来自man find

  

-size n [cwbkMG]

     

文件使用n个空格单位。可以使用以下后缀:

     

'b'表示512字节块(如果没有使用后缀,这是默认值)

     

'c'表示字节

     

'w'表示双字节字

     Kilobytes的

'k'(1024字节单位)

     

'M'表示兆字节(单位为1048576字节)

     

'G'表示千兆字节(单位为1073741824字节)

答案 1 :(得分:3)

您应该使用fedorqui的版本,但仅供参考:

#!/bin/bash
for i in ./*.txt   # ./ avoids some edge cases when files start with dashes
do
  # $(..) can be used to get the output of a command
  # use -le, not <, for comparing numbers
  # 5 != 50k
  if [ "$(stat -c %s "$i")" -le 50000 ]
  then
    rm "$i"  # specify the file to delete      
  fi # end the if statement
done

通常更容易逐个编写程序并验证每个部分是否有效,而不是编写整个程序然后尝试调试它。