我试图找出如何编写一个小脚本来删除小于50千字节的文本文件,但我没有成功。
我的尝试看起来像这样:
#!/bin/bash
for i in *.txt
do
if [ stat -c %s < 5 ]
then
rm $i
fi
done
我会赞美一些指导,谢谢!
答案 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
通常更容易逐个编写程序并验证每个部分是否有效,而不是编写整个程序然后尝试调试它。