shell求救:获取一个文件夹下的所有文件,判断其大小

王者_来归 2012-01-17 02:51:43
我写的shell如下:
#!/bin/bash
for filename in `ls /test/src`
do
echo "entey 1"
fsize=$(ls -l $filename | cut -d '*.txt' -f 5)
echo $fsize
echo $filename
if [[ $fsize = 0 ]]; then
echo "too small"
fi
done
但是怎么也得不到想要的结果。运行时什么也不打印。
如果改为这样:
#!/bin/bash
filelist="/test/src"
for filename in $filelist
do
echo "entey 1"
fsize=$(ls -l $filename | cut -d '*.txt' -f 5)
echo $fsize
echo $filename
if [[ $fsize = 0 ]]; then
echo "too small"
fi
done
打印出的文件大小是0,文件名是/test/src

请问各位,要怎么改才能遍历文件,获取文件大小啊?
...全文
1742 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
justkk 2012-01-17
  • 打赏
  • 举报
回复
或者
ls -l|awk '$5==0 {print "rm",$9}'|sh
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sen_linzhiwang 的回复:]
引用 11 楼 justkk 的回复:
ls -l|awk '$5==0 {print $9,$5}'


如果我要删除这些文件呢?

呵呵

谢谢
[/Quote]

可以了,谢谢您
justkk 2012-01-17
  • 打赏
  • 举报
回复
find /test/src -size 0 -exec rm {} \;
删除所有大小为0的文件
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 justkk 的回复:]
ls -l|awk '$5==0 {print $9,$5}'
[/Quote]

如果我要删除这些文件呢?

呵呵

谢谢
justkk 2012-01-17
  • 打赏
  • 举报
回复
这样也行吧,找到所有大小为0的文件,支持子目录
find /test/src -size 0 -print
justkk 2012-01-17
  • 打赏
  • 举报
回复
ls -l|awk '$5==0 {print $9,$5}'
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 justkk 的回复:]
要怎么处理?
希望一个什么样的结果?
[/Quote]

非常高兴有你帮忙,先谢谢你了!
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
我要的是这样的,遍历 /test/src这个路径下的所有文件,找出文件大小为0的,然后给出提示,哪个文件的大小为0,要求显示的格式如下:
test.txt 0
test1.txt 0
test2.txt 0
....
justkk 2012-01-17
  • 打赏
  • 举报
回复
要怎么处理?
希望一个什么样的结果?
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justkk 的回复:]
ls -l|awk '{print $9,$5}'
行不?
[/Quote]
谢谢您,我用你的方法得到了文件名和文件大小。
非常感谢。
但是,执行后,得到的是所有的文件名和大小,当然,是一个文件一个大小。
我现在需要的是,得到一行的文件名和大小,处理完后,再得到下一行的文件名和大小。
请问大牛,这个要怎么实现?
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justkk 的回复:]
ls -l|awk '{print $9,$5}'
行不?
[/Quote]

我试试
justkk 2012-01-17
  • 打赏
  • 举报
回复
ls -l|awk '{print $9,$5}'
行不?
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liv2005 的回复:]
try

if [ "$fsize" == "0" ]; then

or

if [ $fsize -eq 0 ]; then
[/Quote]
恩,谢谢,现在最关键的是,如何得到文件名与文件的大小。
filename 是文件的路径,不是文件名,
fsize=$(ls -l $filename | cut -d '*.txt' -f 5)
得到的是所有文件的总大小,不是单个文件的大小。
先把这两个问题解决了。
Liv2005 2012-01-17
  • 打赏
  • 举报
回复
try

if [ "$fsize" == "0" ]; then

or

if [ $fsize -eq 0 ]; then
王者_来归 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liv2005 的回复:]
ls | xargs du
[/Quote]
这个加在哪?现在问题是这样的,能遍历文件了,但是得到的不是每个文件的大小,而是全部文件的大小,还有一点就是,为什么大小为0,而不执行:
if [[ $fsize = 0 ]]; then
echo "too small"
Liv2005 2012-01-17
  • 打赏
  • 举报
回复
ls | xargs du

18,771

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧