У меня есть несколько файлов, названных как that : screenshot 13:25.png
Windows пытается открыть эти файлы, вероятно, из-за «:».
Как я могу заменить его?
В терминале, cd
в правый каталог и затем запустите это.
rename 's/\:/-/g' *.png -vn
Это даст предварительный просмотр переименования. Это должно заменить :
на -
.
Если это выглядит правильно, удалите n
из конца, а затем выполните фактическое переименование.
Примечание: Версии Ubuntu выше 17.04 не поставляются с переименованием
, но они всё ещё доступны в репозиториях по умолчанию, поэтому используйте sudo apt install rename
, чтобы получить его
Вот чистый бас:
for i in *:*; do
mv "$i" "${i//:/_}"
done
Формат ${var//pattern/replacement}
заменит все вхождения pattern
на replace
в переменной $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
По сути, идея в том, что [ ]
означает любой из перечисленных символов
. Таким образом, помещая все символы, которые вы хотите заменить, в класс символов, все они рассматриваются сразу.
Для конкретных символов, которые вы просили, все немного сложнее, потому что некоторые из них должны быть escaped (я игнорирую /
, так как *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
Обратите внимание, что я избежал \
,'
и "
, добавив перед каждым из них \
.
Если вы предпочитаете GUI, установите pyrenamer:
sudo apt-get install pyrenamer
Затем запустите его:
pyrenamer
В нём есть десятки опций для шаблонов и форматов переименования.
Я предпочитаю GUI, но в качестве расширения Nautilus, i. e. Nautilus Actions Extra:
sudo add-apt-repository ppa:nae-team/ppa
sudo apt-get update
sudo apt-get install nautilus-actions-extra
nautilus -q
(See www.webupd8.org/2011/12/nautilus-actions-extra-pack-of-useful. html)
Затем, когда Вы выбираете файлы для переименования и нажимаете кнопку Переименовать из контекстного меню, Вам предлагается множество вариантов переименования файлов.
Пакет renameutils
имеет удобную программу под названием qmv
, которая обеспечивает интерактивное пакетное переименование. Вы запускаете ее в каталоге или списке файлов, и она генерирует временный текстовый файл, содержащий их имена, и запускает ваш любимый редактор. При выходе из редактора все измененные имена файлов переименовываются соответствующим образом. qmv
превращает задачу пакетного переименования в задачу редактирования текста.
В этом случае вы можете использовать qmv -f do *:*
для редактирования имен всех файлов, содержащих двоеточие, а затем команду :%s/:/_/g
в Vim (или соответствующий поиск и замену в любом редакторе, который вы используете).
Опция -f do
задает формат текстового файла только с именем целевого файла, что упрощает поиск и замену. Формат по умолчанию имеет две копии имени файла в каждой строке, и Вы редактируете только вторую. Это позволяет ему делать правильные вещи, если вы удалили или переупорядочили строки в файле, но это не всегда проще всего. Есть и другие форматы.
С помощью qmv
вы можете вместо этого передать сгенерированный файл через команду по вашему выбору, например, sed
, если вам не нужна интерактивная возможность.
И вот Nautilus Script, который заменяет (все?) символы Windows-совместимости с дефисом во всех выбранных именах файлов (на основе ответа terdon ;-)
#!/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
Thunar (файловый менеджер XFCE) имеет хорошую встроенную возможность для массового переименования файлов. В нём есть возможность удаления/замены символов, поиска и замены, нумерации файлов и т.д.
Install thunar:
sudo apt-get install thunar
Open thunar, search to your files, select them and select 'rename' (через контекстное меню или F2)
@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