2015-10-23 3 views
0

У меня есть два файла. Первый содержит фильм, а второй - субтитры. Сначала я беру файл фильма, и я хочу выполнить поиск в том же каталоге для файла субтитров. Я знаю, что могу сделать это с помощью grep, но как я могу сравнить это имя двух файлов, учитывая только N букв, и он не должен принимать во внимание символы -, _, ..Соответствует именам файлов в bash

Я новичок в bash, и у меня все еще есть проблемы с написанием этих команд. Может ли кто-нибудь помочь?

Пример: Файл 1: Avengers.avi

Файл 2: пр-engers.sub

Файл 3: aveMgers.sub

префикс должен быть 4 буквы длиной => он будет соответствовать файл 1 и файл 2, потому что, если мы исключим символ, у них есть как минимум первые 4 символа. Файл 3 не относится к этому, поэтому файл 1 и файл 2 будут скопированы в новом Avder папки (первые 4 символа). Эта последняя часть не столь важна.

+3

Это довольно широкий. Просьба привести примеры примеров, желаемый результат, некоторые из ваших попыток ... – fedorqui

+0

Я добавил пример – spoke

+1

Было бы также интересно увидеть рабочий процесс этого: вы указываете имя в качестве параметра, а затем ищете субтитры ? Попытайтесь приложить некоторые усилия к этому, потому что это изначально проблема алгоритма; то мы поместим синтаксис. – fedorqui

ответ

1
for avi in *.avi 
do 
    # remove punctuation characters 
    aviPrefix="${avi//[-_.]//}" 
    # get first 4 characters 
    aviPrefix="${avi:0:4}" 
    for sub in *.sub 
    do 
     subPrefix="${sub//[-_.]//}" 
     subPrefix="${sub:0:4}" 
     # Test if files have the same prefix 
     if [[ $subPrefix = $aviPrefix ]] 
     then 
      if ! [[ -d "$aviPrefix" ]]; 
      then 
       mkdir "$aviPrefix" 
       cp "$avi" "$aviPrefix" 
      fi 
      cp "$sub" "$aviPrefix" 
     fi 
    done 
done 
Смежные вопросы