파일 확장자를 제거하고 동일한 이름을 가진 파일을 검색하려면 basename을 사용하십시오.

파일 확장자를 제거하고 동일한 이름을 가진 파일을 검색하려면 basename을 사용하십시오.

기본적 으로 /test/.​ 및 와 같은 일부 파일에는 하나의 버전이 있는 반면 다른 파일에는 하나의 버전만 있습니다..doc.pdf.pdf.doctest.doctest.pdf

제가 하고 싶은 일은 발생하는 상황을 찾아서 .doc스크립트를 이용하여 해당 상황을 제거하는 것입니다..pdf

나는 다음 코드 줄을 수정했습니다.

find /test/ -name "*.doc" - exec basename {} .doc \; -exec rm {}.pdf \;

그러나 이는 find 명령에서 해당 명명된 파일을 제거 example.doc.pdf하는 대신 지정된 파일을 찾을 수 없다는 오류를 반환합니다 . .pdf내가 이것을 시도하는 이유는 일부 파일 에 삭제하고 싶지 않은 일치하는 파일이 .pdf없기 때문입니다..doc

답변1

다음 명령을 사용할 수 있습니다 find.

find /test/ -name "*.doc" -exec sh -c 'a="$1"; rm "${a%.doc}.pdf"' find-sh {} \;

.doc디렉토리에서 파일을 검색합니다 /test/. 발견된 각 파일에 대해 sh파일을 인수로 사용하여 쉘이 호출됩니다. 파일이 존재하는 경우 ${a%.doc}.pdf파일 확장자를 .doc다음으로 바꾸고 .pdf삭제합니다.rm

답변2

다음 스크립트를 다음과 같이 저장합니다.rm_dub.sh

#!/bin/sh

rm_dub() {
    dir=$(dirname -- "$1")
    base=$(basename -- "$1" "$2")

    rm -- "$dir/$base$3"
}

rm_dub "$@"

그리고 그것을 결합

find /test/ -name "*.doc" -exec sh rm_dub.sh {} .doc .pdf \;

관련 정보