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

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

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

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

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

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

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

5
задан 11 August 2021 в 03:56

2 ответа

Попробуйте этот небольшой фрагмент,

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
  • Удалите # перед mv , если результат соответствует ожиданиям
  • Если в одном каталоге есть несколько файлов mp4, он переименует только первый найденный. Вы можете легко использовать цикл для mv всех mp4 и включать суффикс, такой как _1 и т. Д.
  • Если в одном каталоге есть несколько srts, он будет переименовывать mp4 несколько раз, поэтому он будет называться как последний найденный srt.
3
ответ дан 20 August 2021 в 10:28

Попробуйте сделать это из родительского каталога, в котором находятся другие подкаталоги для пробного запуска:

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

Когда вы будете удовлетворены результатом, удалите echo, чтобы выполнить фактическое переименование.

3
ответ дан 20 August 2021 в 10:28

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

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