REGEX를 사용하여 중첩된 디렉터리에서 파일 찾기

REGEX를 사용하여 중첩된 디렉터리에서 파일 찾기

그래서 이 구조의 폴더가 있습니다.

topperlayer
    ├── layerone
    │   └── testfile
    └── layertwo

layerone및 와 마찬가지로 layertwo한 레이어 아래에 많은 디렉터리가 있을 수 있으며 심지어 하위 디렉터리도 있을 수 있습니다.

레이어 중 하나 또는 레이어의 하위 디렉터리에 파일이 있습니다 testfile.

testfileREGEX를 사용하여 위치를 얻을 수 있습니까 ?

그것은 마치 -

#!/bin/bash
echo $(ls topperlayer/<REGEX>/testfile)

os.walk모든 디렉터리와 하위 디렉터리에서 작업을 수행하여 Python에서 파일을 찾을 수 있습니다 . 하지만 쉘에서 이 작업을 수행하고 싶습니다.정규식.

도움이나 조언을 주시면 대단히 감사하겠습니다.

추신 - 저는 정규 표현식에 대해 아무것도 모릅니다.

답변1

testfile설명에서 언급한 대로 구성 파일에서 파일 경로를 지정해야 하는 경우 먼저 해당 위치를 알아야 합니다.

두 가지 솔루션이 있습니다.

  1. find topperlayer -type f -name testfile
    

    topperlayer그러면 이름이 지정된 일반 파일 앞에 있는 디렉터리와 모든 하위 디렉터리가 검색됩니다 testfile. 그런 다음 발견된 각 파일의 경로 이름을 인쇄합니다.

  2. shopt -s globstar
    printf '%s\n' topperlayer/**/testfile
    

    그러면 먼저 .NET globstar의 셸 옵션이 활성화됩니다 bash. 이를 통해 **유사하게 작동 하지만 "재귀적" 일치를 사용 *하는 와일드카드 패턴을 사용할 수 있습니다 . 그러면 printf주어진 와일드카드 패턴과 일치하는 각 이름이 인쇄됩니다.

위의 두 옵션 모두 경로 이름을 인쇄합니다.모든 testfile아래에 topperlayer.

파일에 대한 적절한 경로 이름을 찾으면 이를 구성 파일에 추가하십시오.

답변2

find당신은 친구입니까?

find topperlayer -path 'glob/testfile'

glob을 패턴(정규식 아님)으로 바꾸세요.start*middle*end

정규 표현식이 필요한 경우 옵션을 사용하십시오.-regex

find topperlayer -regex 'regex/testfile'

관련 정보