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


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.