그래서 현재 코드는 다음과 같습니다: 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}'