2줄 이상의 파일 목록

2줄 이상의 파일 목록

디렉토리에 많은 파일이 있습니다. 일부 파일에는 한 줄이 있고 일부 파일에는 더 많은 줄이 있습니다.

파일의 줄 수가 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 -l2줄만 반환됩니다. -size +2c이는 3줄 미만의 파일을 열고 읽는 최적화를 건너뛸 뿐입니다 . 바이트, 3줄을 포함할 수 없기 때문입니다).

이는 줄 번호를 찾기 위해 파일 전체를 읽는 대신 가능한 한 적은 수의 명령을 실행하고 세 번째 줄을 확인하자마자 파일 처리를 중지하기 때문에 효율적입니다.

쉘이 이면 zsh다음과 같이 단축할 수 있습니다.

awk 'FNR==3{print FILENAME; nextfile}' ./*(D.L+2)

find . ! -name . -pruneGNU 표준과 동일합니다 find . -mindepth 1 -maxdepth 1(치다)를 제외한 모든 디렉토리 ..

( 위의 코드는 지원되지 않는 구현 awk에서도 작동한다는 점에 유의하세요 . 단지 해당 코드가 파일 전체를 읽고 명령문은 변수 참조로만 처리된다는 점입니다.)awknextfilenextfile

답변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보다 큰지 계산하는 명령입니다.

그런 다음 출력을 인쇄하십시오.

관련 정보