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

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

所以我有一行这样的代码:

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 字节的所有文件,其格式如下:

文件大小 ./文件名

但我想摆脱“./”符号,所以我尝试使用“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

谁能给我一个提示吗?我很感激。

答案1

根据您的系统对 POSIX 的支持,我相信这将为您提供您想要实现的相同结果:

    find . -type f -size -1000c -printf '%P %s Bytes\n'

答案2

看一下剧情简介cut(1):

cut OPTION... [FILE]...

它期望最后一个参数是一个文件(或文件列表)。你正在做的就是提供$item最后一个参数。看来$item639 可以解释错误消息:您在cut需要文件名参数的地方传递 639 。您需要将$item这些cut调用替换为$i.

我认为提取文件名(减号./)的最佳方法是使用参数扩展而不是每次都依赖固定数量的字符:

item2="${i#*./}"

答案3

尝试这个:

ls -l | awk '$5 <= 1000{print $5, $9}'

答案4

find . -type f -size -1000c -printf "%s %f\n"

%s 打印文件的大小(以字节为单位)。
%f 打印删除所有前导目录的文件名(仅最后一个元素)。

相关内容