Переименовать файл, который использует первые 2 буквы каждого слова

В настоящее время я использую простой скрипт для переименования:

for f in *.mp4; do 
    echo mv $f $RANDOM$RANDOM$RANDOM.mp4;
    mv $f $RANDOM$RANDOM$RANDOM.mp4; 
done

Но вместо того, чтобы использовать $random, я хотел бы взять первые 2 буквы каждого слова.

Пример

перед переименованием:

having the best day.jpeg

Переименование рептера:

hathbeda.jpeg

Хорошо, немного сложнее :) Мои имена в основном есть. отделить слова. Возможно ли сделать это еще чем?

2
задан 3 June 2015 в 08:58

2 ответа

Можно сделать это использование сингла rename команда (т.е. Вам не нужно bash сценарий для этого, или можно использовать эту команду в Вашем bash сценарий вместо for цикл):

rename -n 's/(^| )([^ ]{1,2})[^ ]*/$2/g; s/$/.mp4/' *.mp4

Это будет просто подражать поведению echo mv [...], так, чтобы Вы видели результат, ничего на самом деле не переименовывая.

, Если результатом является ожидаемый, то выполненный:

rename 's/(^| )([^ ]{1,2})[^ ]*/$2/g; s/$/.mp4/' *.mp4

разбивка Команды :

  • rename: переименовывает несколько файлов с помощью PCRE s
  • *.mp4: переименовывает только файлы с расширением .mp4

разбивка Regex № 1 :

  • s: выполняет замену
  • /: запускает regex
  • (: начинает группировать позволенные строки
  • ^: соответствует запуску строки
  • |: разделяет вторую позволенную строку
  • : соответствует символ
  • ): остановки, группирующие позволенные строки
  • (: запускает вторую группу фиксации
  • [^ ]{1,2}: соответствия от 1 до 2 случаев любого символа не
  • ): останавливает вторую группу фиксации
  • [^ ]*: соответствия любое количество символов не
  • /: останавливается regex / запускает замену
  • $2: замены второй группой фиксации
  • /: останавливает замену
  • g: замены все происшествия шаблона в строке

разбивка Regex № 2 :

  • s: выполняет замену
  • /: запускает regex
  • $: соответствует концу строки
  • /: останавливается regex / запускает замену
  • .mp4: добавляет .mp4 строка
  • /: останавливает замену
0
ответ дан 3 June 2015 в 08:58

Используя python:

#!/usr/bin/env python2
import glob, os
for filename in glob.glob('*.jpeg'):
    first = filename.split('.')
    second = first[0].split(' ')
    name = ''
    for i in range(0, len(second)):
        name += second[i][:2]
    os.rename(filename, name + '.' + first[1]
  • first список, содержащий части имени файла splitted на . (принятие Вас имеет только один . в имени файла)

  • second список, имеющий имя файла до . splitted на пробелах.

  • Затем мы идем хотя содержание second вынуть первые два символа из него и затем добавление их вместе для получения первой части нашего нового имени файла

  • Затем мы использовали os.rename переименовать файл соответственно путем добавления .jpeg в конце name.

Также обратите внимание, что, целевой файл не должен существовать заранее, если он будет существовать, то он будет перезаписан.

Тест:

Прежде:

$ ls -1
foo.jpeg
having the best day.jpeg
hello kitty cat spam.jpeg
this is a doggy.jpeg

После:

$ ls -1
fo.jpeg
hathbeda.jpeg
hekicasp.jpeg
thisado.jpeg
1
ответ дан 3 June 2015 в 08:58

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

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