усечение имен файлов

Я использую следующую функцию в zsh:

ununzip () {
    rm -r $(unzip -l $1 | grep -v 'Archive:' | \
    grep '[/.]' | sed 's![^a-zA-Z]([a-zA-Z./])!\1!')
}

Т.е. замена команды для удаления всех файлов в очищенном выводе unzip -l.

tar tvf мог использоваться похожим способом.

3
25.11.2010, 08:06
6 ответов

В соответствии с Ubuntu или Debian, это просто:

rename 's/Dropkick Murphys - //' *mp3
6
27.01.2020, 21:08

Выберите тот.

for i in *.mp3; do mv "$i" "${i#* - }"; done
for i in *.mp3; do mv "$i" "${i:19}"; done
4
27.01.2020, 21:08

Можно использовать a for цикл к циклу по файлам Вы хотите изменить. ${var/from/to} заменит первое вхождение from с to в $var, так ${var/Dropkick Murphys - /} ничем заменит "Dropkick Murphys -":

for i in "Dropkick Murphys - "*; do
    mv "$i" "${i/Dropkick Murphys - /}"    
done  
2
27.01.2020, 21:08

Обязательный ответ zsh:

autoload zmv
zmv 'Dropkick Murphys - (*.mp3)' '$1'

Варианты, чтобы сделать переименование для всех имен художника. Обратите внимание, что первая команда берет самое долгое соответствие первого *, например, это переименует Dropkick Murphys - 01 - Walk Away - concert.mp3 кому: Walk Away - concert.mp3.

zmv '* - (* - *.mp3)' '$1'
zmv '*.mp3' '${f#* - }'
1
27.01.2020, 21:08

for i in *.mp3; do mv "$i" "$(echo $i | sed 's/^Dropkick Murphys - //')"; done

или, более общий, для удаления сначала 3 разграниченных пространством слов из имени файла

echo $i | cut -d' ' -f4-

0
27.01.2020, 21:08
  • 1
    На самом деле, cut опрометчиво. regexp, сканирующий для - соответствовал бы лучше здесь. Подсказка: не работайте управляет Вами данный перед пониманием то, что собирается произойти и/или вещи пробного прогона, использующие echo mv ... или smt. как этот прежде, чем работать за реалами. –  alex 25.11.2010, 10:46

Существует a rename.ul команда (я предполагаю по умолчанию в Ubuntu). Это дает Вам простой способ переименовать файлы

Синтаксис:

$ rename from to file...
0
27.01.2020, 21:08

Теги

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