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

bash script, list all the files over a specific size

所以我有这样的代码:

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

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

这个更简洁一点:

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

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

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

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

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

已编辑:

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 提到的,您将整个字符串传递给 cut。使用 -d 选项可以指定您拆分字符串的字符,因此假设大小与信息的其余部分至少分开 space,上面应该会产生您想要的 $item1 和 $item2 .