Короткий довідник з масового перейменування файлів-) - все про лінукс

1. По першому разу я просто в vi створював безліч команд mv виробляють потрібні дії. Найбільш очевидний, і самий трудомісткий шлях Ж :-)

2. Пізніше я почав розбиратися з командним рядком Юнікса і міг запрограмувати масові перейменування.

в sed задається то як хочеться перейменувати файл.

Варіант для zsh

3. Як виявилося пізніше в постачанні perl є простенька утилитка rename. Першим параметром можна вказати шматочок коду на perl який застосовується до кожного імені файлу передані як параметри.

# Складніший варіант by mancubus.

4. У zsh є модуль zmv який якраз і займається подібними перетвореннями.

Це досить таки складна у використанні команда, і думаю тільки zsh-гуру можуть в повній мірі їй користуватися Ж :-)

Але тим не менше самі розробники пропонують зробити пару досить таки зручних алиасов, які поводяться

noglob перед командою позначає що * Не буде пребразован в імена файлів.

PS окреме спасибі товаришу mancubus за те що штовхнув мене дописати цю статтю Ж :-)

5
Рейтинг: 5 (1 vote)

Навігація по публікаціям

Скриптик для перейменування кириличних імен файлів в ругліш:

ЗИ: А ще ЕМНІП начебто був патч до convmv - додавання кодування ругліш ...

у мене utf-8 і результат не вражав

Запрацювало, після того як зберіг скрипт в koi-8, і додав примусову перекодування імені файлу в koi-8

За одне замість for використовував map.
Дякую! PS
до речі линка в тему

За map - спасибі, як-то протупил ;-))
Так, скриптик писався для неUTFной розкладки ... Не знаю як в разі Text :: Iconv, але iconv без -c спотикається на неприпустимих символах ... Так що тут треба бути обережним ;-))
А для UTFной - щось таке:

ЗИ: Ще спосіб «перекодування» (якась альтернатива convmv): свежевишедшій Midnight Commander уміє по ALT-e змінювати кодування прямо на файлової панелі. Встановлюємо на панелях потрібні кодування і далі F5 або F6 ...

Шановні гуру.Зачем такі складності. -) В Delphin знаходите потрібну папку з файлами в яких повний бардак.
Виділяєте всі файли «Правка»> «Виділити все»> у вікні курсором мишки стаєте на виділене, при натисканні правої кнопки миші з'являється меню, вибираєте «Періменовать», з'являється віконце в якому написано «об'єкт» і #. Замість об'єкта ставите все що хочете і нажімете ОК і буде вам щастя перейменоване з 1 і до ......

Та забув, з приводу десяток і сотень, як я з ними борюся. Я роблю так, що б не було бардаку з десятками сотнями і так далі, я в місце «об'єкт» ставлю потрібне кількість нулів і # а далі все шляхом 🙂

По-перше подпісиваті прийнято з кінці повідомлення, а не прямо в заголовку Ж :-)
По-друге не зовсім зрозуміло до чого цей коментар: до статті або до гілки коментарів про пронумерування файлів?
По-третє може варто було б реальних прикладів додати, а краще з скріншот (я так розумію Delphin це якась GUI програма).
Ідеї ​​для прикладів можна брати прямо зі статті:

  • Змінити розширення файлів
  • пронумерувати файли
  • Перекласти імена файлів у великій / малий регістри
  • Прибрати префікс або суфікс у файлів
  • і так далі..

Тоді це був би не тільки критичний, але і корисний коментар Ж :-)

з купи файлів з різними іменами, припустимо розширенням * .gif потрібно привести до такого виду:
image001.gif
image002.gif
...
imageNNN.gifХотя це дуже затребуване, але ненагуглівается гарне рішення ...

Шкода що початкові нулі не підставляти, тобто вид:
image1.gif
image2.gif
...
image999.gifЧто потім, при сортуванні, буде врозкид ...

x = 1000; for i in * .gif; do mv $ i image $ x.gif; x = $ (($ x + 1)); done

Чомусь ніхто не написав спосіб для find. Однак він теж може команди ісполнять.К наприклад тупе перейменування всіх файлів в каталозі

за одне перейменує всі що у вкладених каталогах Ж :-) ps
* Помоему зайве?
<> зразок треба квотувати
-
Signature invent in progress 24% ## ...... ..

> За одне перейменує всі що у вкладених каталогах Ж :-) Тільки в поточному:
-maxdepth 1> * помоему зайве?
+1><> зразок треба квотувати
ІМХО немає додано:
Винен, квотувати потрібно

А я через mc копіюю / перейменовую. Виділяєш потрібні файли, тиснеш F5 або F6, в джерелі пишеш:
* .c
а в приймачі:
* .bakІ все. Або, наприклад, поміняти місцями ім'я і розширення:
*. *
2.1Только метасимволу шелл галочка повинна бути включена для обох прикладів. Якщо її вимкнути, то там трохи складніше, але зате більш гнучкими. Коротше F1 в помошь 🙂

1) Доповнення до трудомісткого способу:

2) Щодо rename зі складу perl: величезне спасибі, раніше не знав, що там можна будь-які команди писати; використовував тільки s для заміни: D. До речі, з російськими буквами це не спрацює. Якщо локаль НЕ utf8, то можна зробити так:

Але якщо utf8 - не працює. Є ідеї? 3) Не зовсім в тему, але тим не менше: Для масового перейменування файлів між різними кодуваннями є convmv

Щоб lc працювало з російськими буквами при локалі utf8, додати

В результаті виходить монстр:

Причому і це не повне рішення: частину повідомлення про помилку в разі неможливості перейменування буде крякозябри: (Є ідеї? І взагалі, як забезпечити роботу lc з російськими буквами без таких громіздких конструкцій?

а просто use utf8 ;?
-
Signature invent in progress 24% ## ...... ..

Якщо список файлів береться з текстового файлу (cat ./spisok.txt) і імена файлів містять прогалини, то така схема не буде работатьВ таких випадках я поступаю так:

> Якщо список файлів береться з текстового файлу (cat ./spisok.txt) і імена файлів містять прогалини, то така схема не буде работатьКакая саме? 😉

о! це тема! мені якраз потрібно конвертувати диск з koi8-r в utf8 в зв'язку з переключенням системної локалі на останню ...

Спасибі ramok за капітальну працю і mancubus за ідею. Господа лінуксоїди, додавайте сюди свої способи перейменування;) додам свої 2 копійки - пакет mmv (apt-get install mmv), включає в себе утилитки mmv, mcp, mad, mln (ну, все вони лінки на один exeшнік, але це не настільки важливо 😉

Ось ще один приклад для перейменування, тобто всюди прибирає префікс kinopoisk.ru- з імені файлів

P.S.
у мене bash і навіть з

працює як то не так.

А можна привласнити групі файлів без розширень, що знаходяться в одній директорії, розширення ..
Спліт розрізав, а тепер їх все перейменовувати потрібно ...