파일 이름 길이로 파일 찾기

파일 이름 길이로 파일 찾기

파일 이름 길이로 모든 파일을 찾고 싶습니다.

예를 들어 길이가 1인 파일을 찾으려면 a.go, b.go.

나는 다음을 넣었다:

grep '.\{1\}' file

그러나 이것은 작동하지 않습니다. 파일 이름 길이로 파일을 찾으려면 어떤 명령을 사용할 수 있나요?

답변1

파일 이름만 찾으려면 다음 명령을 사용하면 됩니다.

find -exec basename '{}' ';' | egrep '^.{100,}$'

이 명령은 를 실행하고 find파일 또는 디렉터리 이름을 추출한 basename다음 최소 100자 길이의 파일 이름 또는 디렉터리 이름을 찾습니다. 파일 이름의 정확한 길이 {100}를 찾으려면 {100,}.

경로가 포함된 파일 이름을 찾으려면 다음을 수행하십시오.

find | egrep '/[^/]{100,}$'

그러면 find 명령이 실행된 상대 경로를 포함하여 파일 이름이 반환됩니다.

답변2

grep파일 콘텐츠에서 패턴을 찾아보세요. 보고 싶다면이름이러한 파일의 경우 쉘 glob을 사용할 수 있습니다(현재 디렉토리의 파일 이름만 고려하려는 경우).

echo ?.go

(그런데, glob을 평가하는 것은 command가 아닌 쉘입니다 echo.)

현재 디렉터리에서 시작하여 반복적으로 디렉터리를 찾으려면 사용할 도구는 다음과 같습니다 find.

find . -name '?.go'

(쉘이 패턴을 호출하기 전에 glob으로 평가하는 것을 방지하려면 패턴을 인용해야 합니다 find.)

답변3

먼저 grep검색을 통해콘텐츠파일인 경우 파일 이름을 검색하지 않습니다. 당신이 원하는 것을 위해 find. 파일 이름 길이를 설정하는 옵션은 없지만 출력을 구문 분석하여 원하는 것을 얻을 수 있습니다. 다음은 다음 파일이 포함된 디렉터리에서 실행한 몇 가지 예입니다.

$ tree
.
├── a
├── ab
├── abc
├── abcd
└── dir
    ├── a
    ├── ab
    ├── abc
    └── abcd

이 디렉터리에서 파일을 검색하면 다음이 반환됩니다.

$ find . -type f | sort
./a
./ab
./abc
./abcd
./dir/a
./dir/ab
./dir/abc
./dir/abcd

따라서 길이가 X인 파일을 찾으려면 경로를 제거하고 마지막 파일 뒤의 문자만 일치시켜야 합니다 /.

 $ find . -type f | grep -P '/.{3}$'

sed명령은 단지 를 삭제합니다 ./. 이 플래그는 PCRE에 필요한 -PPerl 호환 정규식을 활성화하며 "문자열의 끝과 일치"를 의미합니다.{n}$

간단히 다음과 같이 할 수도 있습니다.

find . -type f | grep -P '/...$'

길이가 15인 파일 이름과 일치하도록 15개의 점을 입력하는 작은 숫자에는 적합하지만 그다지 효율적이지는 않습니다.

마지막으로 확장자를 무시하고 파일 이름만 일치시키려면 다음을 수행하십시오(@slm 제안대로).

find . -type f | grep -P '/.{1}\.'

그러나 a.bo.go파일 이름이 두 개 이상 포함될 수 있는 경우 다음과 같은 항목도 찾을 수 있습니다 ..

find . -type f | grep -P '/.{1}\.[^.]+$'

참고: 위의 해결 방법은 줄 바꿈 등을 포함하지 않는 비교적 정상적인 파일 이름을 가지고 있다고 가정합니다. 길이를 계산할 때 파일 이름의 공백도 무시하지 않고 계산하는데 이는 원하는 결과가 아닐 수 있습니다. 여기에 문제가 있는 경우 알려주시면 답변을 업데이트하겠습니다.

답변4

지정하지는 않지만 파일이 디렉터리 구조 내에 있는 경우 다음 명령을 사용하여 find길이가 1인 파일을 찾을 수 있습니다 grep.

$ find . -type f  | grep -P '/.{1}\.'

$ find . -type f  | grep -P '/.{1}\.' | head -10
./util-linux-2.19/include/c.h
./88366/a.bash
./89186/a.bash
./89563/b.txt
./89563/a.txt
./89563/c.txt
./89563/d.txt
./91734/2.c
./91734/4.c
./91734/1.c

관련 정보