파일을 일괄 암호화하는 다음 스크립트가 있습니다.
#!/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
실패하면 다음 -exec
or가 -delete
실행되지 않습니다.
답변2
{}
쉘 코드 중간에 파일 이름을 포함 하지 말고 쉘에 인수로 전달하십시오.
이와 같이:
find "/some/dir" -type f -exec bash -c '
gpg -e -r [email protected] "$1" && echo rm "$1"
' bash {} \;
echo
출력이 만족스러우면 명령문을 제거하십시오.
IMHO 이것은 매우 흥미로운 개념이며 이 특별한 경우뿐만 아니라 도구 상자에 있는 트릭입니다.