찾기 및 실행: 아포스트로피가 포함된 파일 이름 처리

찾기 및 실행: 아포스트로피가 포함된 파일 이름 처리

파일을 일괄 암호화하는 다음 스크립트가 있습니다.

#!/bin/bash
find "/some/dir" -type f -exec bash -c "gpg -e -r [email protected] '{}' && rm '{}'" \;

파일 이름에 아포스트로피가 포함되어 있지 않으면 스크립트가 제대로 작동합니다. 그러면 gpg는 잘못된 구문에 대한 오류를 인쇄합니다. 이 파일들을 어떻게 해야 할까요?

답변1

쉘을 호출하지 않고도 이 작업을 수행할 수 있다고 생각합니다.

find "/some/dir" -type f -exec gpg -e -r [email protected] {} \; -exec rm {} \;

또는

find "/some/dir" -type f -exec gpg -e -r [email protected] {} \; -delete

이는 -exec ... \;조건부 역할도 하기 때문에 작동해야 합니다. 따라서 gpg실패하면 다음 -execor가 -delete실행되지 않습니다.

답변2

{}쉘 코드 중간에 파일 이름을 포함 하지 말고 쉘에 인수로 전달하십시오.

이와 같이:

find "/some/dir" -type f -exec bash -c '
    gpg -e -r [email protected] "$1" && echo rm "$1"
' bash {} \;

echo출력이 만족스러우면 명령문을 제거하십시오.


IMHO 이것은 매우 흥미로운 개념이며 이 특별한 경우뿐만 아니라 도구 상자에 있는 트릭입니다.

관련 정보