bash脚本,列出特定大小的所有文件

时间:2015-01-22 04:21:58

标签: bash shell

所以我有一些像这样的代码:

result=`find . -type f -size -1000c -print0 | xargs -0 ls -Sh | head`

for i in $result; do
    item=`wc -c $i`
    echo $item1 
done

这将打印出当前折叠中最多1000字节的所有文件,其格式如下:

size_of文件./name_of_the_file

但我想摆脱" ./"符号,所以我尝试使用" cut"

我想做类似的事情:

for i in $result; do
    item=`wc -c $i`
    item1=`cut -f 1 $item`    // this gives me the size 
    item2=`cut -c 7- $item`   // this gives me all the character after ./ 
    echo item1, item2         // now make it print 
done

但我得到的错误如下:

cut: 639: No such file or directory

任何人都可以给我一个暗示吗?我很感激。

3 个答案:

答案 0 :(得分:1)

当您可以使用cut变量扩展运算符时,请不要使用bash

for i in $result; do
    i=$(echo $i | cut -c3-) # remove ./ prefix
    size=$(wc -c < $i)
    echo $size, $i
done

要将cut与变量一起使用,必须将变量回显到管道,因为cut处理文件或stdin(与大多数Unix过滤器一样)。

通过重定向wc输入而不是将文件名作为参数,它只打印大小,而不是大小和文件名,因此不需要削减其输出。

答案 1 :(得分:0)

这更简洁:

find ./ -type f -size -1000c  -ls | sed -e 's/\.\///' | awk -e '{ print $7, $11 }'

答案 2 :(得分:0)

编辑:

for i in $result; do
    item=`wc -c $i`
    item1=`echo $item | cut -d" " -f1`    // this gives me the size 
    item2=`echo $item | cut -d" " -f2-`   // this gives me all the charac...
    echo $item1, $item2         // now make it print 
done

正如Barmar所说,你正在把整个弦传递给切割。使用-d选项可以指定拆分字符串的字符,因此假设大小与信息的其余部分分开至少一个空格,上面应该产生$ item1和$ item2。