所以我当前的代码如下:scan.h
#!/bin/bash
while IFS= read -r line;
do
byte=$(stat -c%s "$line");
echo "$line : $byte";
done< <(ls *.$1)
在 UNIX 中,一旦我运行我的代码,它会像这样执行:
./scan.sh cpp
arraysum.cpp : 359
countLines.cpp : 1199
createtext.cpp : 240
multiproc1.cpp : 196
myWc.cpp : 1230
test.cpp : 193
这是预期的,因为它显示了当前目录中的所有 .cpp 文件,后跟它们的字节数。但是,我还想找到目录文件夹中的其他文件,但我似乎不知道如何横向进入它们。
旁注:也只是出于好奇,我是否可以根据字节大小整理我的打印语句?
答案1
一般来说,您会使用find
递归搜索目录,例如
find . -name '*.cpp'
如果您有 GNU find
,您可以直接打印出文件名和大小(以字节为单位),从而避免调用stat
find . -name '*.cpp' -printf '%f:%s\n'
如果您不介意颠倒顺序,则可以以明确可排序的方式输出结果 - 例如按大小从高到低进行数字排序
find ../src -name '*.cpp' -printf '%s:%f\n' | sort -t: -rn
您始终可以在排序后交换字段,例如使用 Awk - 这也允许您仅选择前 5 个结果,例如:
find . -name '*.cpp' -printf '%s:%f\n' | sort -t: -rn | awk -F: 'NR==6 {exit} {print $2 " : " $1}'
最后,如果您想让任何“合法”文件名(包括带有换行符的文件名)安全,请使用 null 终止所有内容
find . -name '*.cpp' -printf '%s:%f\0' | sort -t: -zrn | awk -vRS='\0' -F: 'NR==6 {exit} {print $2 " : " $1}'