私のフォローアップとして前の質問、次の形式のファイルが複数ある場合
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}
$var
search
replace
${file/ras./}
$file
ras.
ras.
.
答え2
別のオプションはmmv(Mass MoVeと名前変更)を使用することです。
mmv '*ras.*' '#1#2'
パターンの周りに一重引用符を使用することを忘れないでください。それ以外の場合、星はシェルレベルで拡張されます。
このユーティリティは常に使用できるわけではありませんが、そうでない場合は、次のコマンドを使用してインストールできます。
sudo apt-get install mmv
マニュアルページをご覧くださいここ。
答え3
POSIX互換シェル(bash
、dash
など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