ファイル名の文字列を変更して複数のファイルの名前を変更するには?文字列に「#」が含まれています。

ファイル名の文字列を変更して複数のファイルの名前を変更するには?文字列に「#」が含まれています。

https://serverfault.com/questions/70939/how-to-replace-a-text-string-in-multiple-files-in-linux

https://serverfault.com/questions/228733/how-to-rename-multiple-files-by-replacing-word-in-file-name

https://serverfault.com/questions/212153/replace-string-in-files-with-certain-file-extension

https://serverfault.com/questions/33158/searching-a-number-of-files-for-a-string-in-linux

この記事はすべて私の質問に対する答えです。しかし、それらのどれも私には適していません。置き換えたい文字列に#が含まれているためです。この問題を解決する特別な方法はありますか?

サイトの移行中に、私のイメージファイルが#U00a9に変更されました。これらは次のとおりです。

Lucky-#U00a9NBC-80x60.jpg
Lucky-#U00a9NBC-125x125.jpg
Lucky-#U00a9NBC-150x150.jpg
Lucky-#U00a9NBC-250x250.jpg
Lucky-#U00a9NBC-282x232.jpg
Lucky-#U00a9NBC-300x150.jpg
Lucky-#U00a9NBC-300x200.jpg
Lucky-#U00a9NBC-300x250.jpg
Lucky-#U00a9NBC-360x240.jpg
Lucky-#U00a9NBC-400x250.jpg
Lucky-#U00a9NBC-430x270.jpg
Lucky-#U00a9NBC-480x240.jpg
Lucky-#U00a9NBC-600x240.jpg
Lucky-#U00a9NBC-600x250.jpg
Lucky-#U00a9NBC.jpg

私はこれを次のように変更したいと思います:

Lucky-safeNBC-80x60.jpg
Lucky-safeNBC-125x125.jpg
Lucky-safeNBC-150x150.jpg
Lucky-safeNBC-250x250.jpg
Lucky-safeNBC-282x232.jpg
Lucky-safeNBC-300x150.jpg
Lucky-safeNBC-300x200.jpg
Lucky-safeNBC-300x250.jpg
Lucky-safeNBC-360x240.jpg
Lucky-safeNBC-400x250.jpg
Lucky-safeNBC-430x270.jpg
Lucky-safeNBC-480x240.jpg
Lucky-safeNBC-600x240.jpg
Lucky-safeNBC-600x250.jpg
Lucky-safeNBC.jpg

修正する:

これらの例はすべて「LU00a9ucky」で始まりますが、名前の異なる画像がたくさんあります。文字列の「#U00a9」部分を「safe」に置き換えました。

答え1

現在のディレクトリのファイル名を(非再帰的に)変更するには、(Perl- #)を使用できます。somethingelse名前を変更する便利:

rename  's/#/somethingelse/' *

このような文字は-エスケープする必要があります\

あなたの場合は、以下を使用する必要があります。

rename 's/#U00a9/safe/g' *

特定のファイル選択でのみ作業したい場合(例:only)、その選択に合わせて*.jpg最終入力を調整します。

rename 's/#U00a9/safe/g' *.jpg

実際にファイル名を変更する前にテストを実行するには、次の-nフラグを使用します。

demo/> ls                               
Lucky-#U00a9NBC-125x125.jpg  
Lucky-#U00a9NBC-150x150.jpg 

demo/> rename -n 's/#U00a9/safe/g' *.jpg
rename(Lucky-#U00a9NBC-125x125.jpg, Lucky-safeNBC-125x125.jpg)
rename(Lucky-#U00a9NBC-150x150.jpg, Lucky-safeNBC-150x150.jpg)

OS X の場合、次のコマンドを使用して名前変更をインストールできます。自家製brew install rename

答え2

これは難しくありません。名前の前にバックスラッシュ(\)を追加して、名前からオクトソフ(#)をエスケープしていることを確認してください。

find . -type f -name 'Lucky-*' | while read FILE ; do
    newfile="$(echo ${FILE} |sed -e 's/\\#U00a9/safe/')" ;
    mv "${FILE}" "${newfile}" ;
done 

答え3

ファイルのリストを見つけてキーワードを置き換えます。以下は例です

find . -name '*jpg' -exec bash -c ' mv $0 ${0/\#U00a9NBC/safeNBC}' {} \;

答え4

sedで使用する方法はわかりませんが、bashシェルで試すことができます。

for f in Lucky-#U00a9NBC-*.jpg; do mv -v "$f" "${f/#U00a9/safe}"; done;

説明する:

  1. globに一致するすべてのファイル名を繰り返します(Lucky-#U00a9NBC-*.jpg)。
  2. 移動コマンド(mv)を使用してファイル名を変更する
  3. デフォルトの bash パラメーターの置換 ${var/Pattern/Replacement} を使用して新しい名前を作成します ("${f/#U00a9/safe}")。

パラメータ置換に関する追加情報(私の考えでは非常に利用率が低い):http://www.tldp.org/LDP/abs/html/parameter-substitution.html

関連情報