Рейтинг:5

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

флаг in

У меня есть тысяча папок, содержащих два файла: один со случайным именем (расширение mp4), а другой с именем (расширение srt).

Я намерен заменить случайно сгенерированное имя файла другим именем файла, сохранив расширение (mp4, mkv или avi), содержащееся в той же папке. Кстати, в названиях файлов используются () и другие иностранные символы (ó, ü и т.д.).

В этой ситуации скрипт должен, на мой взгляд:

  1. Зайти в папку
  2. Получите имя с расширением .srt
  3. Переименуйте файл с расширением mp4 в новое имя (сохраняя любое расширение)
  4. Выйти из папки
  5. Рекурсивное перемещение по папкам, так как они могут содержать другие подпапки

Однако 5-й шаг может быть переопределен.

Я был бы признателен за руку. Кто-нибудь может помочь?

Рейтинг:3
флаг jp

Try this from the parent directory where the other sub-directories reside for a dry-run:

find -type f -name "*.srt" |
while IFS= read -r result
    do
    path="${result%/*}"
    fname="${result##*/}"
    name="${fname%.*}"
    for file in "$path"/*.{mkv,mp4,avi}
        do
        [ -e "$file" ] && echo mv -- "$file" "$path/$name.${file##*.}"
        done
    done

When you are satisfied with the output, remove echo to do the actual renaming.

Vidal avatar
флаг in
Проверено и работает. Большое спасибо. Я принял другое решение, потому что оно пришло раньше. Мне нравится ваше предложение, так как оно более понятно для ботаника (как я).
Raffa avatar
флаг jp
@Vidal Добро пожаловать... Мне очень приятно :)
Рейтинг:3
флаг in

Try this little snippet,

shopt -s globstar
for s in **/*.srt; do
    m=( "${s%/*}"/*.mp4 )
    printf '%s --> %s\n' "${m[0]}" "${s%.*}.mp4"
    #mv "${m[0]}" "${s%.*}.mp4"
done
shopt -u globstar
  • Remove the # in front of mv if the output is as expected
  • If there are multiple mp4s in one dir, it will rename only the first it finds. You could easily use loop to mv all mp4's and include a suffix such as _1 etc.
  • If there are multiple srts in one dir, it will rename the mp4 multiple times, so it will be named like the latest srt it finds.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.