Удаление шаблона имен из файлов [дубликат]

На этот вопрос уже есть ответ здесь:

Я скачал несколько файлов с youtube-dl. Имя всегда такое

foo - baar -PSUHDUWHDAIHDWU.ogg/mp3/...

Как я могу удалить эти случайные буквы (вырезать последние '-*') в конце из всех файлов папки, чтобы имя было таким:

foo - baar.mp3/ogg/...

Я пробовал что-то с "rename", но у меня нет идеи, какой шаблон использовать. Я думаю, это должно быть что-то вроде этого: "#-*"

1
задан 21 May 2015 в 00:19

5 ответов

С rename, предполагая, что . только появляется в конце имени файла для расширения, можно использовать следующее выражение:

s/-[^-]*\././

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

rename -n 's/-[^-]*\././' *

, Если изменившие имена выглядят хорошо, то выполненный без -n.

0
ответ дан 21 May 2015 в 00:19

Вместо того, чтобы взломать с заменой шаблона можно просто сказать youtube-dl не включать эти случайные буквы (это - видео идентификатор на самом деле) к заключительному имени файла. Это может быть сделано с , выходной шаблон , например, youtube-dl -o "%(title)s.%(ext)s" 3CUz4M3M1r8 приведет к Ton Steine Scherben - Alles verndert sich.mp4.

0
ответ дан 21 May 2015 в 00:19

Используя bash расширение параметра:

#!/bin/bash
shopt -s extglob
for file in *(*mp3|*ogg); do
    ini="${file%-*}"
    ext="${file##*.}"
    mv "$file" "${ini}.${ext}"
done
  • Здесь мы использовали extglob и функция расширения параметра bash.

  • ini будет содержать начальную часть, отбрасывая часть от последнего - вперед

  • ext, будет содержать расширение, например, ogg, mp3

Тест:

$ ls
scr.sh                                                      Ton Steine Scherben - Ich will nicht werden, was mein Alter ist-WpLfJZvnWSw.ogg
Ton Steine Scherben - Alles verändert sich-3CUz4M3M1r8.ogg  Ton Steine Scherben - Keine Macht für Niemand-XtMPGhXnzWE.mp3
Ton Steine Scherben - Der Traum ist aus-WYZCovq71XE.ogg     Ton Steine Scherben - Komm schlaf bei mir-Nr9V_UH04eA.mp3
Ton Steine Scherben - Feierabend-BopYtPtjlkI.ogg

$ bash scr.sh 

$ ls
scr.sh                                          Ton Steine Scherben - Ich will nicht werden, was mein Alter ist.ogg
Ton Steine Scherben - Alles verändert sich.ogg  Ton Steine Scherben - Keine Macht für Niemand.mp3
Ton Steine Scherben - Der Traum ist aus.ogg     Ton Steine Scherben - Komm schlaf bei mir.mp3
Ton Steine Scherben - Feierabend.ogg
0
ответ дан 21 May 2015 в 00:19

На основе шаблона Вы обеспечиваете, можно попробовать это:

perl-rename "s/\-[a-zA-Z0-9]*\././g" *

Это использует жемчуг regexp для замены любых прописных букв после "-" и прежде a"." только с a"." в любом файле. финал "*" говорит команде включать все файлы в текущий dir

, что Это должно быть выполнено в dir, у Вас есть свои файлы.

0
ответ дан 21 May 2015 в 00:19

Результаты Сценария

#!/bin/bash
# Author : Serg Kolo
# Description: script for renaming files 
# for http://askubuntu.com/q/626258/295286

for file in *; do

        FILENAME=$( awk -F '-' '{gsub(" ","");print $1"-"$2}' <<< "$file")
        EXTENSION=$( awk -F '.' '{print $2}' <<< "$file")
        mv "$file" ./"$FILENAME.$EXTENSION"

done

enter image description here

0
ответ дан 21 May 2015 в 00:19

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

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