Я создал много "родственника пути к файлу" (таким образом, они работают над моим телефоном также), плей-листы в моей папке Soundtrack, но также и в другом месте я верю и теперь решил переименовать свою классическую подпапку от "европейца" к "Западному".
Как я могу удостовериться, что каждые из путей к файлам изменяются от ../../Classical/European/[...]
кому: ../../Classical/Western/[...]
?
Я обычно вручную редактирую те файлы в Gedit.
Все плей-листы и музыкальные файлы находятся в некоторой подпапке /home/gratis/Music
Это - в основном тот же подход, как предложил Markus, просто немного отличающийся синтаксис:
shopt -s globstar
perl -pe 's|((\.\./){2}Classical)/European/|$1/Western/|' ~/Music/**/*m3u
shopt -s globstar
: эта команда активирует globstar опцию удара, которая делает **
соответствуйте всем файлам и нулю или большему количеству каталогов и подкаталогов. Так, ~/Music/**/*m3u
будет соответствовать всем файлам (и каталоги) под ~/Music
или его подкаталоги, имя которых заканчивается в m3u
.
perl -pe
: распечатайте каждую входную строку после применения сценария, данного -e
к нему.
s|((\.\./){2}Classical)/European/|$1/Western/|
: это - оператор замены. Его общий формат s|foo|bar|
который заменит foo
с bar
. Более стандартная форма s/foo/bar/
но разделители могут быть любым символом. Так как здесь мы хотим соответствовать чему-то, что содержит /
, Я использовал |
как разделитель для ясности. (\.\./){2}
: соответствие ../
точно два раза. Поскольку .
означает "любой символ" в регулярных выражениях, их нужно оставить (\.
). Круглые скобки здесь используются для группировки \.\./
вместе так {2}
относится к группе.
((\.\./){2}Classical)
: круглые скобки здесь снова привыкли к форме группа, но на этот раз это - так, чтобы мы могли обратиться к группе как $1
на правой стороне замены. Вот почему мы заменяем $1/Western
, потому что $1
то, что было подобрано (\.\./){2}Classical
.
Если это делает то, что Вы хотите, выполняете его снова с -i
опция заставить его отредактировать исходный файл:
perl -i.bak -pe 's|((\.\./){2}Classical)/European/|$1/Western/|' ~/Music/**/*m3u
-i.bak
заставит это редактировать файл и создавать резервное копирование оригинала с тем же именем и расширением .bak
.
Вы можете заменить все вхождения этой строки во всех файлах, используя эту однострочную строку perl:
perl -i -pe 's/\.\.\/\.\.\/Classical\/European\//..\/..\/Classical\/Western\//g' /home/gratis/Music/*/*.m3u
Будьте осторожны, так как эта команда заменит все вхождения от ../../Classical/European/[...]
до ../../Classical/Western/[...]
во всех [ 113] файлы во всех подпапках /home/gratis/Music/
, но не в /home/gratis/Music/
.
Если вы просто хотите проверить вывод, удалите -i
из команды. Таким образом, команда не изменяет файлы.