以下を使用してイメージファイルの名前を再帰的に変更しようとします。find
注文する。
現在のコマンドは次のように書かれています。
$ find . -name '*.jpg' -exec rename "${echo $(uuidgen) | cut -c1-8}.jpg" '{}' \;
エラーは次のとおりです。
bash:
${echo $(uuidgen) | cut -c1-8}.jpg
:間違った置換
{}
さまざまな組み合わせの使い方を試しましたが、()
何も機能しないようです。単独で実行するとecho $(uuidgen) | cut -c1-8
正しい結果が得られるので、イメージ名にこの文字列を挿入するだけです。
次のように交換した場合:
$ find . -name '*.jpg' -exec rename "$(echo $(uuidgen) | cut -c1-8).jpg" '{}' \;
コマンドエラーは次のとおりです。
(評価1)の1行目で「strict subs」を使用する場合は、「jpg」という単語のみ使用できません。
これらの問題をどのように解決できますか?
ご協力ありがとうございます!
答え1
によるとman rename
:
要約
名前の変更 [ -v ] [ -n ] [ -f ] perlexpr [ ファイル ]
説明する
"rename" は、最初の引数で指定された規則に従って指定されたファイル名を変更します。 perlexpr パラメーターは、ファイル名を指定する Perl の $_ 文字列の少なくとも一部を変更すると予想される Perl 式です。与えられたファイル名が式によって変更されない場合、名前は変更されません。コマンドラインにファイル名が指定されていない場合は、標準入力からファイル名を読み込みます。
したがって、最初のパラメータは正規表現です。最初のパラメータをすべての文字列に一致する正規表現に変更し、次に置き換える必要があります。$(echo $(uuidgen) | cut -c1-8).jpg
find . -name '*.jpg' -exec rename 's/.*/$(echo $(uuidgen) | cut -c1-8).jpg/' '{}' \;
答え2
mv
ただ使用してくださいrename
。
find . -name '*.jpg' -exec mv '{}' "$(echo $(uuidgen) | cut -c1-8).jpg" \;