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 .
所以我有这样的代码:
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 .