所以我有一些像这样的代码:
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
任何人都可以给我一个暗示吗?我很感激。
答案 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。