x개 이상의 파일을 포함하고 지정된 크기보다 큰 모든 디렉터리에서 파일을 찾는 방법은 무엇입니까?

x개 이상의 파일을 포함하고 지정된 크기보다 큰 모든 디렉터리에서 파일을 찾는 방법은 무엇입니까?

지정된 크기보다 큰 파일이 지정된 수 이상 포함된 디렉터리의 모든 폴더를 찾는 방법은 무엇입니까?

사용 사례의 예로는 분할된 동영상 파일이 포함된 폴더를 찾는 것입니다.병합이와 같이( ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4).

답변1

그리고 zsh:

x=42 size=M+1
print -rC1 -- **/*(NFe['()(($#)) $REPLY/*(N.L${size}Y${x}[$x]oN)'])

1MiB보다 큰 파일이 42개 이상 포함된 디렉터리가 인쇄됩니다.

  • **/*: 재귀적 와일드카드
  • (...): 글로벌 예선
  • N: Nulglob: 일치하는 항목이 없어도 불평하지 마세요.
  • F: 파일 형식 제한목차모두 F(최소 하나의 항목 포함).
  • e['code']:필터 평가는 파일에 대해 true를 e반환합니다 code.
  • ()(($#)) args: 인수 개수가 0이 아닌 경우 true를 반환하는 익명 함수
  • $REPLY: 현재 고려 중인 파일(여기서는 디렉터리)입니다 code.
  • $REPLY/*: 내부의 파일. $REPLY/**/*하위 디렉터리의 파일 개수도 계산하는 것으로 대체되었습니다 .
  • .: 제한된정기적인파일(디렉토리, 심볼릭 링크, fifo, 장치 제외).
  • LM+1: 1보다 큰 파일(파일 크기 1048577바이트 이상)의 경우 제한 크기는 다음 정수 메가바이트로 반올림됩니다.
  • Y$x: 나 좀 그만 돌봐줘엑스이는 최적화된 것으로 확인되었습니다 .
  • [$x]:선택하다엑스목록에 있는 항목입니다 (다시 최적화이므로 code최소한 하나의 인수가 전달되었는지 확인하세요).
  • oN: 이 목록을 정렬하려고 애쓰지 마세요.

D숨겨진 디렉터리/파일도 고려하려면 glob 중 하나 또는 둘 다에 한정자를 추가할 수 있습니다.

그러나 나중에 이러한 파일에 대해 일부 작업을 수행하려면 다음을 수행해야 할 수도 있습니다.

for dir in **/*(NF); do
  large_files=($dir/*(N.LM+1))
  (( $#large_files >= 42 )) && do-something-with $large_files
done

답변2

감사해요@무루약간만 수정된 명령은 다음과 같습니다.

find . -type d -exec sh -c '[ $(find "$1" -type f -size +1M | wc -l) -gt 1 ]' _ {} \; -print

이 예에서는 현재 디렉터리에서 1MB보다 큰 파일이 2개 이상 포함된 모든 폴더를 찾습니다(전체 경로의 점을 바꿀 수 있음).

관련 정보