find 명령: 경로 이름을 무시하는 방법은 무엇입니까?

find 명령: 경로 이름을 무시하는 방법은 무엇입니까?

디렉토리와 하위 디렉토리에서 특정 유형의 파일을 찾아서 파일 이름을 인쇄해야 합니다. 이것이 주요 명령입니다.
find -type f -name "*.c"

이제 각 결과에서 경로를 어떻게 차단할 수 있습니까? (아마도 awk를 사용하여 이 작업을 수행할 수 있지만 더 쉽게 수행할 수 있는 방법이 있기를 바랍니다.)

답변1

GNU find는 파일 이름에 대한 형식 지정자 출력을 -printf지원하는 조건자를 지원합니다.%f

find -type f -name "*.c" -printf '%f\n'

답변2

사용이 복잡하지 않습니다 awk.

find . -name '*.c' -type f | awk -F/ '{print $NF}'

또는 sed:

find . -name '*.c' -type f | LC_ALL=C sed 's|.*/||'

(파일 경로에 개행 문자가 포함되어 있지 않다고 가정) 이는 모든 find구현에서 작동합니다.

그리고 zsh:

print -rC1 -- **/*.c(N.:t)

답변3

basename프로그램을 사용하여 파일 이름을 얻을 수 있습니다.

find . -type f -name \*.c -exec basename {} +

이는 findGNU 확장이 없는 시스템에서 작동합니다 -printf.

답변4

GNU 조회는 -printf. 하위 디렉터리도 검색하면 파일 이름이 (보통) 여러 번 나타날 수 있습니다!

당신은 -printf "%p\n"또는 -printf "%f\n".

관련 정보