ディレクトリの名前を変更して、年を最後から最初に移動する


11

現在、いくつかの音楽フォルダに苦労しています。私はかつて、次のパターンに従って名前を付けることにしました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。すべてのディレクトリには -セパレータがありますが。


2
サンプルのディレクトリ名と予想される出力を追加してください。
ムル

たとえば、「Aes Dana-Memory Shell-2004」があり、「2004
Aes

1
質問を編集する方法を知っているので、なぜそれを質問に追加しないのですか?また、アルバム名やアーティスト名に含ま-れているものはありますか?
ムル

定義上、名前は「-」区切り文字で配置されていますか?名前のどこかで発生する可能性がありますか?
ジェイコブVlijm

ソースフォルダーをテキストファイルにリダイレクトし、vimを使用する傾向があります。ソースフォルダーの関連コンポーネントを正しい順序で各行の2番目のパラメーターを作成するマクロを作成し、別のマクロを使用して各行の先頭にmvを配置します。大量の/失われたフォルダーを作成した場合に備えて、最初にフォルダー構造のコピーを取得することさえできます。

回答:


16

perl rename(Ubuntuで一般的に入手可能-違いを明確にする@Sergに感謝します。疑わしい場合は呼び出して/usr/bin/rename、正しいものを取得する必要があります)にアクセスできると仮定すると、以下を使用できます。

rename -n 's/(.*) - (\d{4})\//$2 - $1/' */

-n実際にディレクトリの名前を変更するには、テスト後に削除します。これは、すべてのアルバムの日付が1000〜9999であることを前提としています。おそらく妥当です...

説明

  • s/old/new置き換えるoldnew
  • (.*)$1後で参照するために任意の数の文字を保存します
  • (\d{4})\/$2後で参照するために、行の最後に4桁を保存します。
  • */ すべてのディレクトリに一致します(ファイルではなく、@ muruに感謝します!)

3
たぶん*/ディレクトリだけにマッチするために。
ムル

@muruそれは動作しないようです!私は愚かに何をしていますか?
ザンナ

1
@Zanna iが言及しているのは、いくつかのシェルにmkshが組み込まれているという事実ですrename。完全なパスまたはコールと交換するのに十分であるprenamePerlのリネームを呼び出すために
Sergiy Kolodyazhnyy

1
@Zannaこの面白いビットを見つけました:unix.stackexchange.com/a/229248/85039 TL; DRrename「時々呼ばれるprename」わけではありませんが、明らかに同じスクリプトの2つの「ブランチ」であり、1つはメンテナンスされていませんDebianによるものと、もう1つのものです。そうそう。。。一部のシェルは、自分の持っている-それは混乱の全体の多くだrename、Perlのパッケージは、独自のを持ってrename、それ自体DEBIAN別のパッケージを提供
Sergiy Kolodyazhnyy

1
@Zanna私はと呼ばれるプログラムを考えていたrename.ulunix.stackexchange.com/q/229230/21167
zwol

6

単純な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)

仕組み:

  • 主なトリックは、ターゲットが存在するディレクトリと同じディレクトリからスクリプトを実行することです。また*/、スクリプトへの引数としてディレクトリのみを提供するために渡します
  • このスクリプトは、すべてのコマンドライン引数を反復処理し、各ファイル名を文字ごとに文字列のリストに分解します-。新しいファイル名は、抽出した部分から構成されます。
  • move()shutilsモジュールからの関数は、実際にディレクトリの名前を変更するものです

使用法に注意してください。 ./rename_dirs.py */

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.