次のようなファイルがたくさんあります。
DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat
そして、私は彼らがこのように見えることを望みます:
DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat
これどうやってするの?
名前変更コマンドにはいくつかのバリエーションがありますが、あなたの場合は、
rename ABC XYZ *.dat
Perlの正規表現を使用するバージョンがあります。
rename 's/ABC/XYZ/' *.dat
for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done
rename
またはsed
は不要です。ただbash パラメータ展開 。
このような何かがそれを行います。 for
ループは、キャプチャするファイル名に応じて変更する必要があります。
for fspec1 in DET01-ABC-5_50-*.dat ; do
fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
mv ${fspec1} ${fspec2}
done
ちなみに、データのcopiesで、まったく異なるディレクトリでこれらのスクリプトを常にテストする必要があります。
Sedの使用方法を学ぶ必要があります http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
また、ファイルエントリをループできるようにするために使用します http://www.cyberciti.biz/faq/bash-for-loop/
あなたのコマンドは次のようになります。私は私の隣に用語がないので確認できません
for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`
これらの答えはすべてシンプルで良いものです。ただし、これらのスクリプトにインタラクティブモードを追加して、誤検出を検出できるようにしています。
if [[-n $ inInteractiveMode]]
それから
echo -e -n "$ oldFileName => $ newFileName\nこの変更を行いますか?[Y/n]:"
実行を読む[[-z $ run || "$ run" == "y" || "$ run" == "Y"]] && mv "$ oldFileName" "$ newFileName"
fi
または、インタラクティブモードをデフォルトにして、自動化されたスクリプトまたは大胆な気分を味わう場合は、強制フラグ(-f | --force)を追加します。そして、これはあなたをあまり遅くしません:デフォルトの応答は「はい、私は名前を変更したいです」ので、あなたはただ各プロンプトでエンターキーを押すことができます(「-z $ run\
テスト。
私はsedでこれを行うのが好きです。あなたの場合:
for x in DET01-*.dat; do
echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e
実行される内容を確認するには、最初に「sh -e」の部分を省略するのが最善です。