ファイルを一括暗号化する次のスクリプトがあります。
#!/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 これは非常に興味深い概念であり、この特別な場合だけでなく、ツールボックスのトリックです。