Как переименовать группу файлов с тем, что выглядит как путь к файлу Windows в их именах

9

Я получил кучу файлов с испорченным именем файла. Все имена файлов имеют одинаковое начало, которое выглядит как каталоги файлов Windows. Проблема в том, что существует более 700 файлов, и я действительно не хочу просматривать их вручную и переименовывать. Это примеры имен файлов (Примечание: ни у одного из них нет файловых каталогов):

G:some\really\long\file\path\then\the\name1.jpg
G:some\really\long\file\path\then\the\name2.png
G:some\really\long\file\path\then\the\filename.txt
G:some\really\long\file\path\then\the\file_name.mov
...

Важный вывод заключается в том, что каждый файл имеет G:some\really\long\file\path\then\the\перед именем файла, которое я хотел бы.

Поэтому я бы хотел, чтобы вышеуказанные файлы выглядели так:

name1.jpg
name2.png
filename.txt
file_name.mov

Я попробовал renameкоманду и не увенчался успехом. Я все еще новичок в Linux и действительно не знаю, как с этим справиться или что действительно нужно гуглить. Любая помощь будет оценена.

kingcobra1986
источник

Ответы:

18

Я просто удалил все до последнего обратного слеша rename

$ rename -n 's/.*\\//' G*
rename(G:some\really\long\file\path\then\the\file_name.mov, file_name.mov)
rename(G:some\really\long\file\path\then\the\filename.txt, filename.txt)
rename(G:some\really\long\file\path\then\the\name1.jpg, name1.jpg)
rename(G:some\really\long\file\path\then\the\name2.png, name2.png)

Удалить -nпосле тестирования, чтобы фактически переименовать файлы.

Ноты

  • -n ничего не делай, просто распечатай что будет изменено
  • s/old/newзаменить oldнаnew
  • .* любое количество любых символов
  • \\ Первый обратный слеш должен избежать второго.
  • Поскольку регулярные выражения являются жадными, это выражение также .*\\съедает все предыдущие обратные слеши.
  • Поскольку последние два разделителя //пусты, все совпадения в поисковой части удаляются.
Занна
источник
Мне просто нужна первая строка, или мне нужно сделать это для каждого файла?
kingcobra1986
вам просто нужна первая строка @ kingcobra1986, остальные - только вывод. *соответствует всем файлам, но позвольте мне изменить это на G*- сделано - теперь оно соответствует всем файлам, начиная с Gтекущего каталога, и будет работать с ними всеми сразу. Если они находятся в нескольких каталогах, мы тоже можем с этим справиться по-разному
Zanna
Это сработало. Можете ли вы объяснить, что именно происходит в этой строке?
kingcobra1986
1
@ kingcobra1986 извините, я добавил заметки. Надеюсь, это понятно, если нет, пожалуйста, не стесняйтесь просить больше!
Занна
Ха, мне нравится идея использовать .*\\ со времен жадных.*
Зиазис
10

Вы можете сделать это в чистом виде, bashиспользуя расширение параметров оболочки .

${file##*\\}(cut-up-to-last-prefix) удаляет все от начала имени файла до последнего \увиденного.

for file in *; do
    mv -v "$file" "${file##*\\}";
done

Результаты переименования:

‘G:some\\really\\long\\file\\path\\then\\the\\file_name.mov’ -> ‘file_name.mov’
‘G:some\\really\\long\\file\\path\\then\\the\\filename.txt’ -> ‘filename.txt’
‘G:some\\really\\long\\file\\path\\then\\the\\name1.jpg’ -> ‘name1.jpg’
‘G:some\\really\\long\\file\\path\\then\\the\\name2.png’ -> ‘name2.png’
αғsнιη
источник
6

Если вы ищете решения с графическим интерфейсом , есть много приложений для массового переименования. Я бы предложил Thunar , который является файловым менеджером по умолчанию для Xfce. Он поставляется с удобным инструментом переименования. Вы можете установить Thunar, выполнив в терминале следующую команду:

sudo apt-get install thunar

Вы, вероятно, сможете установить и из Ubuntu Software.

Как пользоваться утилитой

  1. После установки Thunar запустите утилиту Bulk Rename .
  2. Нажмите на значок + и добавьте файлы, которые вы хотите переименовать.
  3. Нажмите на раскрывающееся поле под списком выбранных файлов и выберите « Поиск и замена» .
  4. В поле Search For: введите G:some\really\long\file\path\then\the\(часть, от которой вы хотите избавиться), оставьте поле Replace With: пустым. Вы должны увидеть предварительный просмотр изменений в столбце « Новое имя» .
  5. Чтобы применить изменения, нажмите кнопку « Переименовать файлы» .

Помимо поиска и замены эта утилита поддерживает следующие действия:

  • Введите дату / время
  • Вставить / перезаписать
  • нумерация
  • Удалить персонажей
  • Верхний регистр Нижний регистр
pomsky
источник
не существует ли один для Наутилус (я думаю, что есть!)? Кажется, довольно излишне предлагать установить для этой цели новый файловый браузер.
Занна
@Zanna В v3.22 есть один, но я думаю, что все еще недоступен в репозиториях Ubuntu.
Помский
2
Thunar довольно удобен и, кажется, хорошо сосуществует с другими файловыми браузерами, поэтому я думаю, что стоит установить его для этой цели. Но можете ли вы расширить этот ответ объяснением того, как сделать массовое переименование в Thunar?
Элия ​​Каган
1
@EliahKagan и он тоже легкий
pomsky
Отлично сделано, теперь я могу поднять голос (у меня есть Xubuntu, в котором я тоже могу проверить :))
Zanna