그래서 이 구조의 폴더가 있습니다.
topperlayer
├── layerone
│ └── testfile
└── layertwo
layerone
및 와 마찬가지로 layertwo
한 레이어 아래에 많은 디렉터리가 있을 수 있으며 심지어 하위 디렉터리도 있을 수 있습니다.
레이어 중 하나 또는 레이어의 하위 디렉터리에 파일이 있습니다 testfile
.
testfile
REGEX를 사용하여 위치를 얻을 수 있습니까 ?
그것은 마치 -
#!/bin/bash
echo $(ls topperlayer/<REGEX>/testfile)
os.walk
모든 디렉터리와 하위 디렉터리에서 작업을 수행하여 Python에서 파일을 찾을 수 있습니다 . 하지만 쉘에서 이 작업을 수행하고 싶습니다.정규식.
도움이나 조언을 주시면 대단히 감사하겠습니다.
추신 - 저는 정규 표현식에 대해 아무것도 모릅니다.
답변1
testfile
설명에서 언급한 대로 구성 파일에서 파일 경로를 지정해야 하는 경우 먼저 해당 위치를 알아야 합니다.
두 가지 솔루션이 있습니다.
find topperlayer -type f -name testfile
topperlayer
그러면 이름이 지정된 일반 파일 앞에 있는 디렉터리와 모든 하위 디렉터리가 검색됩니다testfile
. 그런 다음 발견된 각 파일의 경로 이름을 인쇄합니다.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'