경로없이 find 명령에서 이름 만 얻는 방법


14

find를 사용하여 검색 결과에서 이름 만 가져 오려고하지만 항상 디렉토리도 포함합니다. find를 사용하여 이름 만 인쇄하거나 변수에 할당하는 방법

find trunk/messages/ -name "*.po" -printf '%f\n'

이것을 변수에 할당하는 유사한 명령. 예를 들어 나중에 사용하기 위해 "자원".

편집 : 가능하면 확장명을 제외한 이름 만 가능합니다.

답변:


20

사용하다 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

큰 감사합니다 :). dirs에서 PO 확장 만 제거 할 수 있습니까? dir1 / po1.po 및 dir2 / po2.po는 dir1 / po1 및 dir2 / po2와 같이 얻을 수 있습니까?
웨이크

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck 감사합니다. 마지막으로 확장자가없는 파일 이름과 파일이있는 마지막 폴더를 가져와야합니다. 예 : dir1 / subdir1 / subsubdir1 / po1.po 및 dir2 / subdir2 / subsubdir2 / po2.po는 다음과 같은 변수로 설정해야합니다 subsubdir2 / po2.
웨이크

@ user1754665 흠, 아마도find . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes 마지막에 여는 중괄호 앞에 백 슬래시의 목적은 무엇입니까 find?
Utku

3

-execdir경로없이 파일을 인쇄하는 매개 변수를 사용할 수 있습니다 ( 예 :

find . -name "*.po" -execdir echo {} ';'

확장자가없는 파일 :

find . -name "*.txt" -execdir basename {} .po ';'

참고 : POSIX가 아니기 때문에 BSD find는 깨끗한 파일 이름을 인쇄하지만 GNU find를 사용 하면 extra가 인쇄 ./됩니다.

참조 : 왜 GNU는 BSD의 발견과 다르게 -execdir 명령 동작합니다 찾을?


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.