디렉토리에 많은 파일이 있습니다. 일부 파일에는 한 줄이 있고 일부 파일에는 더 많은 줄이 있습니다.
파일의 줄 수가 2보다 큰 특정 디렉터리에서 파일 이름(전체 경로 포함)을 표시하려고 합니다.
지금까지 내가 한 일은 디렉토리에 파일을 표시하는 것이었습니다. /abc/def -최대 깊이 1 -유형 f 찾기
답변1
GNU를 사용 awk
하거나mawk
그리고 다른 것들도, 최소 3줄을 포함하는 현재 디렉터리의 일반 파일을 나열합니다.
find . ! -name . -prune -type f -size +2c -exec awk '
FNR==3{print FILENAME; nextfile}' {} +
(여기에는 종료되지 않는 줄도 포함됩니다. 파일에 a\nb\nc
대신 2줄만 포함되어 있으면 a\nb\nc\n
파일은 여전히 3줄로 간주됩니다. 비록 wc -l
2줄만 반환됩니다. -size +2c
이는 3줄 미만의 파일을 열고 읽는 최적화를 건너뛸 뿐입니다 . 바이트, 3줄을 포함할 수 없기 때문입니다).
이는 줄 번호를 찾기 위해 파일 전체를 읽는 대신 가능한 한 적은 수의 명령을 실행하고 세 번째 줄을 확인하자마자 파일 처리를 중지하기 때문에 효율적입니다.
쉘이 이면 zsh
다음과 같이 단축할 수 있습니다.
awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)
find . ! -name . -prune
GNU 표준과 동일합니다 find . -mindepth 1 -maxdepth 1
(치다)를 제외한 모든 디렉토리 .
.
( 위의 코드는 지원되지 않는 구현 awk
에서도 작동한다는 점에 유의하세요 . 단지 해당 코드가 파일 전체를 읽고 명령문은 변수 참조로만 처리된다는 점입니다.)awk
nextfile
nextfile
답변2
grep -Hsc . -- * | sed -n '/:[0-2]$/!s/:.*$//p'
그러나 빈 줄에 대해 생각하지 마십시오. 계산되기를 원하는 경우:
grep -Hsc '$' -- * | sed '/:[0-2]$/d;s/:.*$//'
답변3
다음 명령을 시도해 보세요.
find . -maxdepth 1 -type f \
-exec sh -c 'test $( wc -l {} | cut -f1 -d" " ) -gt "2"' \; -print
$(rm -rf ~)
디렉터리에서 일부 외부 파일이 발견 되면 명령이 해당 디렉터리의 모든 데이터를 삭제할 수 있으므로 주의해야 합니다.
find . -maxdepth 1 -type f
현재 디렉터리에서 깊이가 1인 파일을 검색합니다. 이는 하위 디렉터리로 이동하지 않음을 의미합니다.
-exec sh -c
명령을 실행합니다. 여기에서 명령에 대한 스크립트를 실행합니다.
'test $( wc -l {} | cut -f1 -d" " ) -gt "2"'
각 파일의 행 수가 2보다 큰지 계산하는 명령입니다.
그런 다음 출력을 인쇄하십시오.