터미널에서 "find" 출력을 구분하려면 공백을 사용하세요.

터미널에서 "find" 출력을 구분하려면 공백을 사용하세요.

저는 다음과 같이 find특정 유형( )이 20개 이상 포함된 .txt모든 폴더를 찾는 데 사용합니다.

 find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | awk '$1 > 20'

출력은 다음과 같습니다.

  44 ./fold9863
    202 ./fold689
    122 ./fold45
    202 ./fold2

숫자는 각 폴더의 .txt 파일 수를 나타냅니다. find를 사용하여 숫자 없이(그리고 선행 없이 ) 공백으로 구분된 ./폴더 이름을 얻을 수 있는 방법이 있습니까? 이와 같이:

fold9863 fold689 fold45 fold2

답변1

다음 코드는 폴더 이름을 공백으로 구분하여 한 줄에 인쇄합니다.

find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
  awk '$1 > 20 { sub("^[.]/","",$2); printf("%s ",$2) } END { printf("\n") }'

폴더 이름에 공백이 포함되어 있으면 이 목록을 사용할 때 문제가 발생할 수 있습니다. 다음 이름을 참조할 수 있습니다.

find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
  awk '$1 > 20 { sub("^[.]/","",$2); printf("\"%s\" ",$2) } END { printf("\n") }'

줄 끝에 추가 공간이 있지만 추가 코드도 방지됩니다. 한 가지 가능성:

find . -type f -iname '*.txt' -printf '%h\n'|sort|uniq -c | \
  awk '$1 > 20 {sub("^[.]/","",$2);printf("%s\"%s\"",X,$2);X=" "} END {printf("\n")}'

답변2

표현식 을 이 표현식으로 바꾸면 폴더 이름의 앞부분이 모두 awk제거됩니다../

awk '$1 > 20 { sub("^\\./", "", $2); printf "%d\t%s\n", $1, $2 }'

열 대신 행으로 폴더 이름을 얻으려면 awk다시 수정하십시오. 이번에는 숫자가 인쇄되지 않도록 하십시오.

awk '$1 > 20 { sub("^\\./", "", $2); printf "%s ", $2 } END { printf "\n" }'

관련 정보