У меня есть много фотографий, которые должны быть переименованы.
[Wedding] Happy Day_001 [February].jpg
[Mountain] Summer Camp_165 [May].jpg
[Beach] Music Fest_58 [August].jpg
Мне нужны все квадратные скобки, которые будут удалены. Для этого я нашел это и это.
Используя sed
управляйте как на тех страницах, пространство прежде и после того, как скобки будут все еще там. В моем случае я хочу, чтобы текст внутри, пространство прежде и после, и скобки само был удален.
Happy Day_001.jpg
Summer Camp_165.jpg
Music Fest_58.jpg
Удалить [first]
& [last]
скобки, как я могу сделать это с a sed
команда?
sed
неправильный инструмент. Это не переименовывает файлы. В то время как можно соединить его с чем-то, что может, это быть более простым использовать rename
от Perl:
rename -n 's/\[.*?\]//g' *
С -n
, rename
покажет то, какие изменения будут внесены. Выполненный без -n
на самом деле переименовать файлы. rename
Perl, и в Perl, .*?
не жадное соответствие как .*
, таким образом, Вы не должны использовать приемы как [^]]*
.
Удалить окружающий пробел также:
rename -n 's/\s*\[.*?\]\s*//g' *
Вы не должны использовать sed
для переименования файлов но можно использовать программу Perl rename
, например:
$ rename -n 's/\[[^]]+\] ([^[]+) \[[^]]+\]/$1/' *
rename([Beach] Music Fest_58 [August].jpg, Music Fest_58.jpg)
rename([Mountain] Summer Camp_165 [May].jpg, Summer Camp_165.jpg)
rename([Wedding] Happy Day_001 [February].jpg, Happy Day_001.jpg)
Удалить -n
после тестирования для фактического переименования файлов.
s/old/new
замена old
с new
\[
литерал [
[^[]+
некоторые символы, которые не являются [
(stuff)
сохранить stuff
на потом к ссылке как $1
, $2
и т.д. Это только работает, если Ваши имена файлов последовательны. ответ muru является намного более портативным.