次のようなファイルがたくさんあります。
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
キャプチャするファイル名によっては、ループを変更する必要がある場合があります。
for fspec1 in DET01-ABC-5_50-*.dat ; do
fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
mv ${fspec1} ${fspec2}
done
ちなみに、これらのスクリプトは、データのコピーで、まったく異なるディレクトリで常にテストする必要があります。
sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sedの使用方法を学ぶ必要があります。
また、 for を使用して、ファイルエントリをループできるようにしますhttp://www.cyberciti.biz/faq/bash-for-loop/
あなたのコマンドは次のようになります。私のそばに用語がないので、確認できません
for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`
これらの答えはすべて単純で良いものです。ただし、誤検知を見つけることができるように、これらのスクリプトにインタラクティブモードを追加するのが常に好きです。
if [[ -n $inInteractiveMode ]]
then
echo -e -n "$oldFileName => $newFileName\nDo you want to do this change? [Y/n]: "
read run
[[ -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」の部分を省略するのが最善です。