답변:
사용하다 find trunk/messages/ -name "*.po" -exec basename {} .po \;
예와 설명 :
테스트 파일을 작성하십시오.
$ touch test1.po
$ touch test2.po
$ find . -name "*.po" -print
./test1.po
./test2.po
좋아, 경로를 포함하여 파일을 찾을 수 있습니다.
각 결과 basename
에 대해을 실행 하고 이름의 .po 부분을 제거하십시오.
$ find . -name "*.po" -exec basename \{} .po \;
test1
test2
find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
find . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
find
?
-execdir
경로없이 파일을 인쇄하는 매개 변수를 사용할 수 있습니다 ( 예 :
find . -name "*.po" -execdir echo {} ';'
확장자가없는 파일 :
find . -name "*.txt" -execdir basename {} .po ';'
참고 : POSIX가 아니기 때문에 BSD find
는 깨끗한 파일 이름을 인쇄하지만 GNU find
를 사용 하면 extra가 인쇄 ./
됩니다.
내가 찾은 명령을 기반으로 : http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html
당신은 이것을 사용하여 이것을 할 수 있습니다 sed
( basename
접근 보다 나에게 더 빨리 실행되었습니다 ) :
find trunk/messages/ -name "*.po" | sed 's!.*/!!' | sed 's!.po!!'