「assignment02.cc」、「assignment02.h」、「assignment02.txt」などのパターンに一致するファイルのコレクションがあります。これらのファイルを「assignment03.cc」、「assignment03」にコピー/名前変更したいと思います。 h '、' assignment03.txt 'など。
これはシェルスクリプトを使用して簡単にでき、sedである必要があると思います。これまでのところ:
OLD_NO=$1
NEW_NO=$2
echo "Moving from $OLD_NO to $NEW_NO"
for name in assignment$OLD_NO.* ; do
newname=$(echo $name | sed 's/\(.*\)$OLD_NO\(.*\)/\1xx$NEW_NO\2/')
echo "$name -> $newname"
# mv -v $name $newname
done
残念ながら、sedを呼び出す方法では常に入力文字列$name
が返され、実際には正規表現による検索/置換は行われません。
注:インターネットを見ると、この機能を持つrename
コマンドがありますが、私のMacBookでは使用できません。
ここでsedを使用すると、必要以上に複雑になります。シェルの組み込みのテキスト操作機能を使用します。たとえば、${name#assignment02}
は、assignment02
から接頭辞$name
を削除します。
for name in assignment02.*; do
mv "$name" "assignment03${name#assignment02}"
done
ファイル名にシェルの特殊文字が含まれていないことが確実な場合は、二重引用符は必要ありません。
利用可能なzshがある場合、そのzmv
関数は、このような種類の名前変更に役立ちます。
autoload zmv
zmv '(assignment)02.(*)' '${1}03.$2'
あなたはすでに複雑すぎると考えています
rename 02 03 *02*
'rename'は、arg3以降で指定されたすべてのファイルの名前の最初の引数( '02')を2番目の引数( '03')で置き換えます(* 02 *)
別のアプローチ:
for ext in {cc,h,txt}
do
echo mv assignment02.$ext assignment03.$ext
done
長期的には、「名前を変更」してみてください