文字や文字列を削除して複数のファイルの名前を変更するには?

文字や文字列を削除して複数のファイルの名前を変更するには?

私のフォローアップとして前の質問、次の形式のファイルが複数ある場合

sw.ras.001
sw.ras.002
sw.ras.003

ras.ファイルの中央にあるすべてのコンテンツを削除するには、どのコマンドを使用できますか?

答え1

前の質問に対する回答を少し変更するだけです。

rename s/ras\.// sw.ras.*

または

for file in sw.ras.*; do
    mv "$file" "${file/ras./}"
done

説明する:

rename正規表現とファイルのリストをperl取得し、各ファイル名に順次正規表現を適用し、正規表現を適用した結果として各ファイルの名前を変更するスクリプトです。perl私たちの場合、rasリテラルと一致し、\.リテラルと一致します..改行文字を除くすべての文字を意味します)。これは何も置き換えません。

このループは(標準シェルglob)で始まるforすべてのファイルを取得し、それを繰り返します。最初の一致を検索してに置き換えるため、最初の一致が返されて削除されます。したがって、このコマンドはファイル名を同じ名前から減算するように変更します。この検索と置換を使用すると、文字は特殊文字ではなく文字通り理解されます。sw.ras.${var/search/replace}$varsearchreplace${file/ras./}$fileras.ras..

答え2

別のオプションはmmv(Mass MoVeと名前変更)を使用することです。

mmv '*ras.*' '#1#2'

パターンの周りに一重引用符を使用することを忘れないでください。それ以外の場合、星はシェルレベルで拡張されます。

このユーティリティは常に使用できるわけではありませんが、そうでない場合は、次のコマンドを使用してインストールできます。

sudo apt-get install mmv

マニュアルページをご覧くださいここ

答え3

POSIX互換シェル(bashdashなどksh)から:

for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
    mv "${file}" "${file/ras\./}"
done

または以下を使用してrename

rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]

答え4

find、xargs、および sed を使用します。

find -name 'sw.ras.*' -print0 | sed -ze "p;s/\.ras//" | xargs -0 -n2 mv

https://stackoverflow.com/questions/4793892/recursively-rename-files-using-find-and-sed#comment60553396_11709995

関連情報