ファイル名の特定の文字列でファイル名を変更する方法

ファイル名の特定の文字列でファイル名を変更する方法

各ファイル名の特定の数値文字列に名前を変更する必要がある多くの.jsonファイルがあります。次の形式に従います。

[Artist] Title (Date) [Language][Publisher][Website.####][Pages].json

「####」は、各ファイルの名前を変更する必要がある一意の数値IDを表し、長さは1〜4文字です。次のようにする必要があります。

####.json

この目標をどのように達成できますか?

答え1

そしてzsh

autoload -Uz zmv
zmv -n '*\[*.(<->)\]\[*(.json)' '$1$2'

満足すれば削除-n(テスト実行)します。

ablezmv autoload関数には 2 つのパラメーターがあります。

  1. zsh拡張グローバルモード
  2. 交換仕様

パターンに一致するファイルを探します。以下は、現在のディレクトリに順番に含まれているすべての非表示のファイルです。

  • *任意数の文字(またはバイト)
  • \[文字通りの意味[
  • *任意数の文字(またはバイト)
  • .文字通りの意味.
  • <->任意のASCII 10進数シーケンス(<x-y>xからyまでの数字を表すASCII 10進数シーケンスと一致)
  • \]\[][文字通り。
  • *任意数の文字(またはバイト)
  • .json:文字通り。

置き換えは、$1最初のペアから一致するものに展開するため、(...)2番目のペア()と一致します。<->$2.json

彼らが貪欲に一致する場合、一番右のペアで(最後を除く)で終わる*数字を探します。たとえば、sの2番目のペアにない場合でも抽出します。[...].<digits>[a.1][a.2.3][x][y][z].json3[...]

これが問題の場合は、次のように変更できます。

zmv -n '*.(<->)\]\[[^][]#\](.json)' '$1$2'

[^][]#andを除くゼロ文字以上(または非文字)と一致します。[]

関連情報