現在、いくつかの音楽フォルダに苦労しています。 artist - album - year
というパターンに従って名前を付けることにしました。今日、これは巧妙な動きではないことに気付いたので、次のパターンに従ってディレクトリに名前を付けたいと考えています:year - artist - album
。
手作業で名前の変更を開始しましたが、約700個のフォルダーがあるため、より簡単な方法が必要です。 gprename
を使用してみましたが、正規表現とbashスクリプトがあまり得意ではありません...
私の悪い指先をspareしみなく手伝ってくれる人はいますか?
いくつかの例:
Aes Dana - Memory Shell - 2004
Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
になるだろう
2004 - Aes Dana - Memory Shell
2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
編集:アーティスト名とアルバム名には、And.Id
やKool & The Gang
などの特殊文字が含まれているものがあります。すべてのディレクトリには、セパレータとして-
がありますが。
Perl rename
(一般にUbuntuで利用可能-違いを明確にする@Sergに感謝します。疑わしい場合は/usr/bin/rename
を呼び出して、正しいものを取得する必要があります)を使用すると仮定します。
rename -n 's/(.*) - (\d{4})\//$2 - $1/' */
実際にディレクトリの名前を変更するには、テスト後に-n
を削除します。これは、すべてのアルバムの日付が1000〜9999であることを前提としています。おそらく合理的です...
s/old/new
old
をnew
に置き換えます(.*)
は、後で$1
として参照するために任意の数の文字を保存します(\d{4})\/
は、行末に4桁を保存して、後で$2
として参照します。*/
はすべてのディレクトリに一致します(ファイルではありません-@muruに感謝します!)シンプルなPythonスクリプトはそのような仕事をすることができます:
$ tree
.
├── Aes Dana - Memory Shell - 2004
├── Anja Schneider & GummiHz - Back To Back (Remixes Part 2) - 2009
└── rename_dirs.py
2 directories, 1 file
$ ./rename_dirs.py */
$ tree
.
├── 2004 - Aes Dana - Memory Shell
├── 2009 - Anja Schneider & GummiHz - Back To Back (Remixes Part 2)
└── rename_dirs.py
スクリプトの内容:
#!/usr/bin/env python
from shutil import move;
import sys
for i in sys.argv[1:] :
parts = i[:-1].split('-')
year = parts[-1].strip()
new_name = year + " - " + " - ".join(parts[:-1]).strip()
move(i,new_name)
*/
を渡して、ディレクトリをスクリプトの引数としてのみ提供します。-
文字の文字列のリストに分解します。新しいファイル名は、抽出した部分から構成されます。shutils
モジュールのmove()
関数は、実際にディレクトリの名前を変更するものです使用法に注意してください:./rename_dirs.py */