find를 사용할 때 상위 디렉토리를 하위 디렉토리의 일부로 나열하지 마세요.

find를 사용할 때 상위 디렉토리를 하위 디렉토리의 일부로 나열하지 마세요.

다음과 같은 상황이 있다고 가정해 보겠습니다.

$ find ./src -name '*.txt'
./src/file1.txt
./src/subdir1/file2.txt
./src/subdir1/subsubdir1/file3.txt
./src/subdir2/file4.txt

검색 중인 디렉토리를 제외하고 싶습니다. 다음과 같습니다.

./file1.txt./src/file1.txt
./subdir1/file2.txt기다리는 대신 ./src/subdir1/file2.txt.

추가해도 -mindepth 1효과가 없습니다.

내가 원하는 것을 순전히 할 수 있습니까 find?

답변1

find지원되는 버전이 없는 경우 이 -printf '%P'대체 구성을 사용하여 검색 경로를 포함하지 않을 수 있습니다.

문제의 시작점:

find ./src -name '*.txt'

동일하지만 결과에 검색 경로가 없습니다.

( cd ./src && find . -name '*.txt' )

귀하의 질문에 표시된 파일 구조를 가정하면 결과는 다음과 같습니다.

./file1.txt
./subdir1/file2.txt
./subdir1/subsubdir1/file3.txt
./subdir2/file4.txt

답변2

연장 대상@steeldriver 님이 말씀하셨습니다.:

$ cd "$(mktemp --directory)" # create temporary directory
direnv: unloading
$ mkdir foo bar
$ touch foo/1 bar/2
$ find foo bar -type f -name '*' -printf '%P\n'
1
2

GNU 매뉴얼은 %P형식 문자열을 다음과 같이 기록합니다 find.

%P
파일 이름과 파일이 발견된 원본 이름이 제거되었습니다.

여기서 "파일명"은 단순히 파일명이 아닌 발견된 파일의 경로명을 의미합니다.

관련 정보