Удаление определенной части имени файла (что после второго тире) для всех файлов в папке

Если у вас есть другие веб-страницы или приложения, работающие на одном сервере, следующая информация может быть полезна для разделения Nagios как собственного виртуального хоста Apache на нестандартном порту (например, здесь 43326).

Удалить стандартную конфигурацию и создать виртуальный хост Apache;

sudo cp /etc/apache2/conf.d/nagios.conf /etc/apache2/sites-available/nagios3
sudo rm /etc/apache2/conf.d/nagios.conf
sudo vi /etc/apache2/sites-available/nagios3

В начало добавления файла;

Listen 43326
<VirtualHost *:43326>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/nagios3

В конец файла add;

[ f3]

Включить новый сайт;

sudo a2ensite nagios3

Если вы запустили брандмауэр (UFW), откройте порт;

sudo ufw allow 43326

Перезапустите Apache

[ f6]
1
задан 12 June 2014 в 07:41

4 ответа

Я бы использовал команду rename на основе Perl - например, чтобы удалить кратчайшую последовательность слов-символов, начиная с - перед суффиксом .mp3, вы можете попробовать

rename -nv -- 's/-\w+?[.]mp3$/.mp3/' *.mp3

Параметр n запускает команду в режиме «сухого хода» - если совпадения выглядят корректно, удалите опцию n и запустите ее снова.

11
ответ дан 24 May 2018 в 06:45
  • 1
    Вы можете просто использовать \. вместо [.]. – nyuszika7h 13 August 2014 в 18:55

Часть, которую вы не хотите, это идентификатор видео. Вы можете использовать выходные шаблоны youtube-dl:

--output "%(title)s"

это будет использовать только заголовок и опустить идентификатор. Запустите youtube-dl без параметров, чтобы увидеть другие параметры.

Вы можете исправить свои существующие загрузки:

for i in *; do mv "$i" `basename "$i" .mp3 | cut -f -2 -d "-"`.mp3; done

(Это эквивалентно ответу Якке).

7
ответ дан 24 May 2018 в 06:45
  • 1
    Спасибо за первую команду (для управления выходным именем файла). Я бы поднял голову, если бы мог, но у меня не было достаточного количества репутации (я вернусь и повышусь, когда найду). Не дал ему принятый ответ, потому что вторая команда взлетела " - NAME-- не является каталогом " для каждого трека. Для исправления уже загруженных ответов @ icasdri. Опять же, спасибо за аргумент youtube-dl thingie. – Bodo 11 June 2014 в 20:21
  • 2
    Возвращаясь, чтобы исправить что-то, мне нужно изменить "% (title) s " к "% (название) s.% (ext) s" потому что он жаловался на аудио и видео с тем же именем и не мог конвертировать. Ура! – Bodo 11 June 2014 в 20:36
  • 3
    Более безопасная версия: mv -- "$i" "$(basename "$i" .mp3 | cut -f 2 -d "-")".mp3. – nyuszika7h 13 August 2014 в 18:53

Вы можете проверить это с помощью этой команды:

for i in *.mp3; do echo "$(echo $i|cut -d- -f1,2).mp3"; done

Обратите внимание, что у вас есть имена файлов без двух тире, поэтому он не будет работать для всего.

Если вы на самом деле хотите изменить имена,

for i in *.mp3
do
  newname="$(echo $i|cut -d- -f1,2).mp3";
  mv $i $newname
done
2
ответ дан 24 May 2018 в 06:45
  • 1
    Если вы хотите играть в нее безопасно, сделайте cp вместо mv. Он оставит вас с исходными файлами, но вам, вероятно, придется удалить их вручную позже – Jakke 11 June 2014 в 19:36
  • 2
    Вы должны отредактировать свой комментарий о cp vs mv в свой ответ – chaskes 11 June 2014 в 19:40
  • 3
    Спасибо за примечание, я новичок, это 4 пробела ... просто проблема иногда подсчитывается: D – Jakke 11 June 2014 в 19:44
  • 4
  • 5
    Вы также должны удвоить кавычки при каждом расширении переменной и подстановке команд. И не используйте echo для чего-либо другого, кроме простого текста, он неспособен. – nyuszika7h 13 August 2014 в 19:01

Решение, использующее только оболочку:

filename=foo-bar-baz

while read -rd-; do
    newname="${newname:+$newname-}$REPLY"
done <<< "$filename"

mv "$filename" "$newname"

Это работает, потому что имя файла не заканчивается тире, поэтому последний токен игнорируется.

0
ответ дан 24 May 2018 в 06:45

Другие вопросы по тегам:

Похожие вопросы: