Змініть кілька імен файлів, замінивши символ


29

У мене є кілька файлів, названих як that : screenshot 13:25.png
Windows, які намагаються відкрити ці файли, ймовірно, через ":".

Як я можу його замінити?


2
Чи можете ви прийняти відповідь, щоб позначити питання як вирішене? Це значно допоможе іншим користувачам.
MERose

Відповіді:


52

У терміналі, cdу потрібний каталог, а потім запустіть це.

rename 's/\:/-/g' *.png -vn

Це дозволить переглянути попереднє перейменування. Його слід замінити :на -.

Якщо це виглядає правильно, видаліть його nз кінця, і тоді воно перейменовано.

Примітка : версії Ubuntu вище 17.04 не постачаються rename, але вони все ще доступні у сховищах за замовчуванням, тому використовуйте sudo apt install renameдля його отримання


Дякую за вашу відповідь. Я постарався, і у мене є ця проблема: Заміна заміни не припиняється в (eval 1) рядок 1.
user236152

@ user236152 Вибачте, я трохи з глузду з’їхав від косого нахилу (був на автопілоті!). Видалено пару і це має бути дійсним зараз.
Олі

Можливо, простий скрипт Nautilus, який замінює всі такі символи, які можуть спричинити проблеми на інших платформах (працює на всіх вибраних файлах), можуть бути корисними для людей з багатоплатформою.
Саді

2
Навіщо його використовувати? Він показує вам, що він робить (полегшує перевернення, якщо ви помилитесь). Чому в кінці? Просто так ви зможете легко її видалити (або n).
Олі

1
@nightcrawler Ви повинні мати змогу застосувати цілком окремі заміни:rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Oli

10

Ось чисте рішення башу:

for i in *:*; do
    mv "$i" "${i//:/_}"
done

${var//pattern/replacement}Формат замінить всі входження patternз replacementв змінної $var. Для отримання додаткової інформації про можливості управління базовими рядками, див. Тут .

Якщо ви хочете зробити це для кількох символів, ви можете просто розмістити їх у класі символів. Так, наприклад, щоб замінити всі ;, :, =, +, %, ,з підкресленням, ви можете зробити:

$ ls 
1foo:bar  2foo:bar:baz  3foo;bar  4foo=bar  5foo%bar  6foo,bar  7foo+bar
$ for i in *; do mv "$i" "${i//[:;=%,+]/_}"; done
$ ls
1foo_bar  2foo_bar_baz  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar

В основному, ідея це [ ]означає any of the characters listed. Отже, розміщуючи всіх символів, які ви хочете замінити, у клас символів, усі вони розглядаються відразу.


Для конкретних символів, про які ви просили, речі є дещо складнішими, оскільки деякі з них потрібно уникати (я ігнорую, /оскільки * nix не дозволяє це в іменах файлів більше, ніж це робить Windows, так що це не буде проблема):

$ ls
1foo<bar  2foo>bar  3foo:bar  4foo\bar  5foo|bar  6foo*bar  7foo?bar  8foo"bar  9foo'bar
$ for i in *; do mv "$i" "${i//[<>:\\|*\'\"?]/_}"; done
$ ls
1foo_bar  2foo_bar  3foo_bar  4foo_bar  5foo_bar  6foo_bar  7foo_bar  8foo_bar  9foo_bar

Зверніть увагу , що я біг \, 'і ", додавши \перед кожним.


Чи можна це покращити, щоб замінити кілька окремих символів (наприклад, усіх тих, які не прийнятні для Windows) іншими?
Саді

1
@Sadi див. Оновлену відповідь.
тердон

В основному їх дев'ять: "<>:" / \ | ? * "
Саді

@Sadi див. Оновлену відповідь.
тердон

Дякую, це може допомогти створити сценарій Nautilus, який робить імена вибраних файлів сумісними з Windows.
Саді

2

Якщо ви віддаєте перевагу графічний інтерфейс, встановіть pyrenamer:

sudo apt-get install pyrenamer

Потім запустіть його:

pyrenamer

У ньому є десятки варіантів шаблонів та перейменовування форматів.


1

Я віддаю перевагу GUI, але як Nautilus Extension, тобто дії Nautilus Extra Extra :

sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q

(Див. Www.webupd8.org/2011/12/nautilus-action-extra-pack-of-useful.html )

Потім, коли ви вибираєте файли для перейменування та натискаєте Перейменувати у контекстному меню, вам пропонується безліч варіантів перейменування файлів.


0

У renameutilsпакеті є зручна програма під назвою, qmvяка забезпечує інтерактивне перейменування партії. Ви запускаєте його в каталозі або списку файлів, і він генерує тимчасовий текстовий файл, що містить їх імена файлів, і запускає ваш улюблений редактор. Після виходу з редактора будь-які змінені імена файлів перейменовані відповідно. qmvперетворює проблему пакетного перейменування в проблему редагування тексту.

У цьому випадку ви можете використовувати qmv -f do *:*для редагування імен усіх файлів, що містять двокрапку, а потім :%s/:/_/gкоманду у Vim (або відповідний пошук і заміна у будь-якому редакторі, який ви використовуєте).

Цей -f doпараметр встановлює формат текстового файлу, щоб мати лише ім'я цільового файлу, що робить пошук і заміну більш простим. Формат за замовчуванням містить дві копії імені файлів у кожному рядку, а ви редагуєте лише другу. Це дозволяє зробити це правильно, якщо ви видалили або упорядкували рядки у файлі, але це не завжди найпростіше. Є й інші формати.

За допомогою цього qmvви можете вибрати передачу згенерованого файлу за допомогою команди на ваш вибір, наприклад sed, якщо ви не хочете інтерактивної можливості.


0

А ось Nautilus Script, який замінює (усі?) Символи, несумісні з Windows, дефісом у всіх вибраних іменах файлів (на основі відповіді тердона ;-)

#!/bin/bash
filesall=""
while [ $# -gt 0 ]
    do
        files=`echo "$1" | sed 's/ /\?/g'`
        filesall="$files $filesall"
        shift
    done
for i in $filesall; do mv "$i" "${i//[<>:\\|*\'\"?]/-}"; done

0

Thunar (файловий менеджер XFCE) має приємну вбудовану функцію для масового перейменування файлів. У ньому є варіанти видалення / заміни символів, пошуку та заміни, нумерації файлів тощо.

Встановити тунар:

sudo apt-get install thunar

Відкрийте тунар, перейдіть до своїх файлів, виберіть їх і виберіть «перейменувати» (через контекстне меню або F2)


0
@echo off
echo.
echo. How many Characters Do You Want To Remove
echo.
echo. From The End Of The FileName ?
echo.
echo.
set /p variable=" > "
setlocal enabledelayedexpansion
for /f "delims=" %%a in (' dir /b /a-d *.mp3') do (
set oldName=%%a
Set newName=!oldName:~0,-%variable%!.mp3
Ren "!oldName!" "!newName!"
)
exit

Це добре працює і має змінну підказку ... Назвіть файл щось на кшталт _
Урізати останні символи.cmd

3
Хоча це може бути правильним, для цього використовується пакетна мова сценарію Windows. Ми знаходимося на AskUbuntu, сайті для питань, пов’язаних з Ubuntu, а отже, і щодо інструментів, пов’язаних з Ubuntu. Я вважаю, що ця відповідь тут не обов'язково може бути доречною.
Сергій Колодяжний

Вам потрібно буде запустити його через Wine, але, можливо, це можливо запустити на Ubuntu ... Це просто дивна відповідь, це все.
Олі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.