だから現在のコードは次のようになります: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}'