正規表現(シェルスクリプト)を使用して複数のファイルをコピー/名前を変更する

正規表現(シェルスクリプト)を使用して複数のファイルをコピー/名前を変更する

「Assignment02.cc」、「Assignment02.h」、「Assignment02.txt」などのパターンに一致するファイルのコレクションがあります。このファイルを「Assignment03.cc」、「Assignment03.txt」にコピー/名前変更したいと思います。 h '、'割り当て03.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では機能しません。

ベストアンサー1

ここで 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'

おすすめ記事