У меня есть несколько файлов, названных как that : screenshot 13:25.png
Windows из-за ":" изо всех сил пытается открыть эти файлы.
Как я могу заменить его?
У меня есть несколько файлов, названных как that : screenshot 13:25.png
Windows из-за ":" изо всех сил пытается открыть эти файлы.
Как я могу заменить его?
Ответы:
В терминале, cd
в правильный каталог и затем запустите это.
rename 's/\:/-/g' *.png -vn
Это будет предварительный просмотр переименования. Следует заменить :
на -
.
Если это выглядит правильно, удалите n
с конца, а затем он будет делать реальное переименование.
Примечание : версии Ubuntu выше 17.04 не поставляются с rename
, но они все еще доступны в репозиториях по умолчанию, поэтому используйте sudo apt install rename
для их получения
n
) легко.
rename 's/\:/-/g; s/%28/ /g; s/%29//g' ...
Вот чистое решение Bash:
for i in *:*; do
mv "$i" "${i//:/_}"
done
${var//pattern/replacement}
Формат заменит все вхождения pattern
с replacement
в переменной $var
. Для получения дополнительной информации о возможностях bash по отображению строк см. Здесь .
Если вы хотите сделать это для нескольких символов, вы можете просто поместить их в класс символов. Так, например, чтобы заменить все ;
, :
, =
, +
, %
, ,
с подчеркиванием, вы можете сделать:
$ 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
Обратите внимание, что я избежал \
, '
и "
, добавив \
перед каждым.
Если вы предпочитаете графический интерфейс, установите pyrenamer:
sudo apt-get install pyrenamer
Затем запустите это:
pyrenamer
Он имеет десятки вариантов шаблонов и форматов переименования.
Я предпочитаю GUI , но в качестве расширения Nautilus, т.е. Nautilus Действия 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-actions-extra-pack-of-useful.html )
Затем, когда вы выбираете файлы для переименования и нажимаете «Переименовать» в контекстном меню, вам предлагается множество вариантов переименования файлов.
В renameutils
пакете есть удобная программа, qmv
которая обеспечивает интерактивное пакетное переименование. Вы запускаете его в каталоге или списке файлов, и он генерирует временный текстовый файл, содержащий их имена, и запускает ваш любимый редактор. Когда вы выходите из редактора, любые измененные вами имена файлов соответственно переименовываются. qmv
превращает проблему пакетного переименования в проблему редактирования текста.
В этом случае вы можете использовать qmv -f do *:*
для редактирования имен всех файлов, содержащих двоеточие, а затем :%s/:/_/g
команду в Vim (или соответствующий поиск и замену в любом редакторе, который вы используете).
В -f do
наборах опций формата текстового файла , чтобы файл-имя получателя только, что делает поиск и заменить проще. Формат по умолчанию имеет две копии имени файла в каждой строке, и вы редактируете только вторую. Это позволяет делать правильные вещи, если вы удалили или изменили порядок строк в файле, но это не всегда просто. Есть и другие форматы.
С помощью qmv
вы можете вместо этого выбрать конвейеризацию сгенерированного файла с помощью команды по вашему выбору, например sed
, если вы не хотите интерактивные возможности.
А вот скрипт Nautilus, который заменяет (все?) Несовместимые с 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) имеет хорошую встроенную функцию для массового переименования файлов. У него есть опции для удаления / замены символов, поиска и замены, нумерации файлов и многое другое.
Установить Thunar:
sudo apt-get install thunar
Откройте Thunar, перейдите к своим файлам, выберите их и выберите «переименовать» (через контекстное меню или 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