所以我的目标是打印一个小图,然后是文件大小和15个最大文件的路径。但是,我遇到了试图在每一行上调用create_graph函数的问题。这里有什么不工作
find $path -type f | sort -nr | head -$n | while read line; do
size=$(stat -c '%s' $line)
create_graph $largest $size 50
echo "$size $line"
done
我的问题是它不是对文件进行排序,而且文件不是n个最大的文件。所以它似乎是我的"而读取线"搞砸了一切。
有什么建议吗?
答案 0 :(得分:0)
第一个命令,
find $path -type f
只打印出文件名。因此它无法按大小对它们进行排序。如果要按大小对它们进行排序,则需要将其打印出来。试试这个:
find $path -type f -exec du -b {} \; | sort -nr | cut -f 2 | head -$n | ...
<强>更新强>:
实际上,只有第一部分似乎可以做任何你想做的事情:
find $path -type f -exec du -b {} \; | sort -nr | head -$n
将打印出一个包含大小和文件名的表,按文件大小排序,并限制为$n
行。
当然,我不知道create_graph
做了什么。
<强>解释强>:
find $path -type f -exec du -b {} \;
查找${path}
或其子目录中的所有文件(不是目录或链接),并在每个文件上执行命令du -b <file>
。
du -b <file>
将输出文件的大小( d isk u sage)。有关详细信息,请参阅man du
。
这会产生这样的结果:
8880 ./line_too_long/line.o
4470 ./line_too_long/line.f
934 ./random/rand.f
9080 ./random/rand
23602 ./random/monte
7774 ./random/monte.f90
13610 ./format/form
288 ./format/form.f90
411 ./delme.f90
872 ./delme_mod.mod
9029 ./delme
因此,对于每个文件,它会打印大小(-b
为&#39;以字节为单位&#39;)。
然后你可以对它进行数字排序。
$ find . -type f -exec du -b {} \; | sort -nr
23602 ./random/monte
13610 ./format/form
9080 ./random/rand
9029 ./delme
8880 ./line_too_long/line.o
7774 ./random/monte.f90
4470 ./line_too_long/line.f
934 ./random/rand.f
872 ./delme_mod.mod
411 ./delme.f90
288 ./format/form.f90
如果你在第一次之后切断它,说五个条目:
$ find . -type f -exec du -b {} \; | sort -nr | head -5
23602 ./random/monte
13610 ./format/form
9080 ./random/rand
9029 ./delme
8880 ./line_too_long/line.o
有些想法将它重新组合在一起:
find . -type f -exec du -b {} \; | sort -nr | head -$n | while read line; do
size=$(cut -d ' ' -f 1 <<< $line)
file=$(cut -d ' ' -f 2 <<< $line)
create_graph $largest $size 50
echo $line
done
请注意,我不知道create_graph
是什么或$largest
包含什么。我直接从你的剧本中解脱出来。