Заменить определенную последовательность символов внутри имен файлов

Заменить определенную последовательность символов внутри имен файлов

Мой друг сгруппировал таким образом кучу файлов в Windows.

введите описание изображения здесь

После того, как я заставил его перейти на Ubuntu, файлы больше не сортируются по количеству восклицательных знаков перед ними, поэтому я хотел бы узнать, как мне переключить их, следуя этому правилу:

  • 1для !и!!

  • 0для !!!и!!!!

Думаю, мне следует использовать awk, но я не эксперт, поэтому я здесь...

решение1

Для пакетного переименования файлов и каталогов с помощью графического интерфейса можно использоватьGPRename.

GPRename

Вы можете установить его с помощью:

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» !в начале ^имени ( ), исзаменитель 0; и

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

для соответствия трем или четырем !символам, за которыми не следует символ «a» !в начале ^имени ( ), исзаменитель 1.

ПРИМЕЧАНИЕ: -nпереключатель позволяет выполнить «пробный прогон» без фактического изменения имен — сначала проверьте выражения и удалите , nесли хотите продолжить.

Связанный контент