특정 개수의 파일이 포함 된 디렉토리 찾기 볼 수 없습니다. 작업 디렉토리에서 지정한

find명령 으로이 작업을 수행 할 수 있기를 희망 했지만 매뉴얼에서 원하는 작업을 수행하는 데 대한 테스트는 볼 수 없습니다. 작업 디렉토리에서 지정한 개수보다 적거나 많거나 정확하게 포함 된 디렉토리를 찾을 수 있기를 원합니다.

find . -filecount +10 # any directory with more than 10 entries
find . -filecount 20 # any directory with exactly 20 entries

그러나 슬프게도 그러한 옵션은 없습니다.



답변

하위 디렉토리 이름과 여기에 포함 된 파일 / 디렉토리 수를 얻기 위해이를 시도 할 수 있습니다.

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

모든 하위 디렉토리에 대해 동일한 작업을 수행하려면 (재귀 찾기) 대신 다음을 사용하십시오.

find . -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \;

정확히 10 개의 파일이있는 디렉토리를 선택하려면 다음을 수행하십시오.

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
  awk '$NF==10'

10 이상 :

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
 awk '$NF>=10'

10 이하

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; |
 awk '$NF<=10'

디렉토리 이름 만 유지하려면 (예 : @evilsoup이 제안한대로 다른 프로세스 다운 스트림으로 파이프하려는 경우) 다음을 사용할 수 있습니다.

find . -maxdepth 1 -type d -exec bash -c "echo -ne '{}\t'; ls '{}' | wc -l" \; |
 awk -F"\t" '$NF<=10{print $1}'

답변

정확히 $NUM 파일을 포함하는 즉각적인 하위 디렉토리를 나열 합니다.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]==num) printf "%s\n", line}'

보다$NUM파일을 포함하는 즉각적인 하위 디렉토리를 나열 합니다.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]>num) printf "%s\n", line}'

보다 적은$NUM 파일을 포함하는 즉각적인 하위 디렉토리를 나열 합니다.

find -maxdepth 2 -mindepth 2 -type f -printf '%h\0' | awk -v num="$NUM" 'BEGIN{RS="\0"} {array[$0]++} END{for (line in array) if (array[line]<num) printf "%s\n", line}'

항목은 널 문자로 끝나 \0므로 줄 바꿈 또는 다른 유형의 공백이 포함 된 파일 이름은 올바르게 해석됩니다. %h인쇄 각 파일의 dirname. awk그런 다음 배열을 사용하여 각 디렉토리에서 발생하는 횟수를 세고 조건이 충족되면 인쇄합니다.

위에서 언급 한 명령은 파일이없는 디렉토리를 표시하지 않습니다. 또한 파일로 링크, 디렉토리, 소켓, 블록, 명명 된 파이프 등이 아닌 일반 파일을 참조하고 있습니다 .

가능한 한 간단 하게이 작업을 시도했습니다. 재귀 서브 디렉토리 또는 파일을 찾으려면 수정 된 명령이 필요합니다. 그것들을 모두 나열하기에는 너무 많은 가능성이 있습니다.


답변

이 시도:

[`찾기. | wc -l` -eq 10] && echo “발견 된”

[`찾기. | wc -l` -gt 10] && echo “발견 된”

[`찾기. | wc -l` -lt 10] && echo “발견 된”

이 예에서 CURRENT 디렉토리에 정확히 10 개 이상, 10 개 이하의 파일 / 디렉토리가 포함되어 있는지 확인할 수 있습니다. 여러 디렉토리를 확인해야하는 경우 루프를 사용하십시오.