検索と実行:アポストロフィを含むファイル名の処理

検索と実行:アポストロフィを含むファイル名の処理

ファイルを一括暗号化する次のスクリプトがあります。

#!/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 これは非常に興味深い概念であり、この特別な場合だけでなく、ツールボックスのトリックです。

関連情報