기본적 으로 /test/
. 및 와 같은 일부 파일에는 하나의 버전이 있는 반면 다른 파일에는 하나의 버전만 있습니다..doc
.pdf
.pdf
.doc
test.doc
test.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 \;