답변:
기본 이름으로 :
find . -type f -exec basename {} \;
;
가 -exec
작업을 종료합니다 . 이 \
있기 때문에 필요 ;
도 쉘에 특별한 의미가 있습니다.
Evilsoup은 게시 된 내용이 파일 이름 간격으로 작동하지 않는다고 언급했습니다. 대신 다음을 사용할 수 있습니다.
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
GNU find를 사용하면 다음을 수행 할 수 있습니다.
find ~/tmp/ -printf "%f\n"
이것은 아마도 OS X에서도 시도해 볼 가치가 있습니다.
-printf
OS X의 BSD에서는 지원되지 않습니다 find
.
-printf
C printf
또는 POSIX 쉘 유틸리티 와 는 거의 관련이 없습니다 printf
. 이 역사적인 함수 이름을 다른 것으로 사용하는 것은 매우 좋지 않습니다. 보수적 인 BSD 녀석들도 같은 방식으로 보았을 것이므로 -printf
, BSD find에서 그 이름으로 복제본을 보지 못할 것입니다 .
파일 경로의 마지막 부분을 제외한 모든 것을 제거하는 더 좋은 방법이 있습니다. awk. 모든 파일에 대해 awk가 한 번 실행되지 않기 때문에 더 좋습니다. 어떤 경우에는 이것이 중요합니다.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
~ / tmp의 파일 만 찾고 모든 항목이 슬래시로 구분 된 목록을 얻습니다. 따라서 슬래시를 필드 구분 기호 (-F /)로 사용하고 마지막 필드 ($ NF)에 해당하는 필드 매개 변수 ($ 1 .. $ 9)를 인쇄합니다.
편집 :
사용 sed
:
$ find . -type f | sed 's/.*\///'
@nerdwaller의 응답에서 언급했듯이 xargs 명령 사용
$ find . -type f -print0 | xargs --null -n1 basename
find . -type f -print0| xargs --null -n1 basename
--null
-n1