Linux でファイルの先頭に文字列を追加して、再帰的にファイルの名前を変更する

Linux でファイルの先頭に文字列を追加して、再帰的にファイルの名前を変更する

多くのコマンドを試しました。どれもうまくいきませんでした。サブフォルダー内のファイルの先頭に文字列を再帰的に追加するには、rename / find などをどのように使用すればよいでしょうか?

file.jpg --> image_file.jpg

find . -name '*.jpg'  -exec  rename  -n "s/^/image_/" *.jpg {} +
for pic in '*.jpg' ; do  rename  -n "s/^/image_/ ${pic}"; done
find . -name '*.jpg'  -exec rename -n "s/^/image_/ .jpg '{}' \;
find "/files/" -type f -exec rename 's/^/image_/' '{}' \;
find . -name '*.jpg' -type f -exec bash -c 'echo "$1" "${1/^/image_/}"' -- {} \;

なぜこう言うのかInvalid cross-device link find . -name '*.jpg' -execdir rename 's:./:/image_:' {} +

答え1

見つかりました! このコマンドは、すべてのサブディレクトリ内の各ファイルの先頭に文字列を再帰的に追加します。なぜ機能するのかまだわかりませんが、機能します。実際の結果を得るには、「-n」を削除してください。

find . -name '*.jpg' -execdir rename -n 's:./:./image_:' {} +

結果の例:rename(./28652316400.jpg, ./image_28652316400.jpg)

  • s代替品を意味します。

  • :私が理解した限りでは、これは「.」の最初の出現箇所に行き、「.」まで行ったら「image_」に置き換えて終了するという意味です。(ただし間違っているかもしれません)。読んでください。ここbash およびスクリプトにおけるコロンの意味について詳しく説明します。

関連情報