ファイル名内の特定の文字シーケンスを置換する

ファイル名内の特定の文字シーケンスを置換する

私の友人はWindowsでこのように大量のファイルをグループ化しました

ここに画像の説明を入力してください

Ubuntu に切り替えさせた後、ファイルは先頭の感嘆符の数に基づいて順序付けられなくなったので、次のルールに従って切り替える方法を知りたいです。

  • 1および!!!

  • 0および!!!!!!!

awk を使うべきだと思いますが、私は専門家ではないので、ここにいます。

答え1

GUIを使用してファイルとディレクトリの名前を一括変更するには、GP名前変更

GP名前変更

以下の方法でインストールできます:

sudo apt-get install gprename

答え2

Python スクリプトの場合:

#!/usr/bin/env python3
import os
import shutil
import sys

dr = sys.argv[1]
replace = ["!", "!!", "!!!", "!!!!"]

for f in os.listdir(dr):
    test = [f.startswith(s) for s in replace]
    if test.count(True) > 2:
        shutil.move(dr+"/"+f, dr+"/"+"0"+f.replace("!", ""))
    elif 0 < test.count(True) < 3:
        shutil.move(dr+"/"+f, dr+"/"+"1"+f.replace("!", ""))

が名前の先頭にのみ出現する!!!!と仮定すると、先頭の および!!!が に、およびが に置き換えられます。0!!!1!

使用するには

  1. スクリプトを空のファイルに貼り付け、rename.py
  2. ターミナル ウィンドウから次のコマンドで実行します。

    python3 /path/to/rename.py '<directory>'
    

    <directory>名前を変更するファイルを含むディレクトリです。

答え3

Perlベースのrenameコマンドを使用することもできます。例:

rename -vn -- 's/^!{1,2}(?!!)/0/' *

名前の先頭( )!の後に a が続かない1文字または2文字に一致し、!^s代替0;および

rename -vn -- 's/^!{3,4}(?!!)/1/' *

名前の先頭( )!に a が続かない3文字または4文字に一致し、!^s代用する1

注:-nスイッチを使用すると、実際に名前を変更せずに「ドライ ラン」を実行できます。最初に式をテストし、n続行する場合は削除します。

関連情報