Массовое переименование видеофайлов с использованием ввода из файла списка воспроизведения

Ответ на мой вопрос пришел из раздела комментариев Стивена Харриса. Он заметил, что я запускаю скрипт от имени пользователя root, который будет записывать в любой файл независимо от того, есть права на запись или нет.

2
24.02.2020, 16:06
3 ответа
while read -r i ; do
    file=$(echo $i | cut -d- -f1).mp4
    if [ -e "$file" ]; then
        mv "$file" "$i"
    fi      
done < playlist.m3u8

for i in ?*.mp4; do
    mv "$i" "$(grep -xm1 "${i%.*}"'-.*\.mp4' playlist.m3u8)"
done
1
28.04.2021, 23:22

Вы могли бы использовать pasteтак:

paste <(ls -1 *mp4 | sort -n) playlist.m3u8  | sed 's,\t,\t",' | sed 's,^,",' | sed 's,mp4,mp4",g' | xargs -L1 mv

Результат:

$ ll
total 4.0K
-rw-r--r-- 1 ja users   0 Feb 24 15:09 9 - Intro to Forms-BVbdZ1133JU.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 8 - Changing State (and 'this')-XJzDF9bj368.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 7 - DOM Events--ZB8I2PmiOw.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 6 - React Dev Tools--XQ2zCdxw0I.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 5 - State-yuN4EMjR4K4.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 4 - React Components-Fis_Q3rkgtM.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 3 - React Setup (with CDN)-SAX6RMEFVM4.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 2 - How React Works-pKYiKbf7sP0.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 10 - Create React App-5QwNCX3UbXc.mp4
-rw-r--r-- 1 ja users   0 Feb 24 15:09 1- Introduction-OxIDLw0M-m0.mp4

Хотя в данном конкретном случае это сработает, обратите внимание, что синтаксический анализ вывода ls не является хорошей идеей .

0
28.04.2021, 23:22

Если у вас есть bash4+, вот один из способов использования mapfile, он жеreadarray

#!/usr/bin/env bash

shopt -s nullglob

rawfiles=(*.mp4)
mapfile -t files < <(printf '%s\n' "${rawfiles[@]}"| sort -n)
mapfile -t playlistfile < <(sort -n playlist.m3u8)

for i in "${!files[@]}"; do
   mv -v  "${files[$i]}" "${playlistfile[$i]}"
done

Вывод в Linux

renamed '1.mp4' -> '1- Introduction-OxIDLw0M-m0.mp4'
renamed '2.mp4' -> '2 - How React Works-pKYiKbf7sP0.mp4'
renamed '3.mp4' -> '3 - React Setup (with CDN)-SAX6RMEFVM4.mp4'
renamed '4.mp4' -> '4 - React Components-Fis_Q3rkgtM.mp4'
renamed '5.mp4' -> '5 - State-yuN4EMjR4K4.mp4'
renamed '6.mp4' -> '6 - React Dev Tools--XQ2zCdxw0I.mp4'
renamed '7.mp4' -> '7 - DOM Events--ZB8I2PmiOw.mp4'
renamed '8.mp4' -> '8 - Changing State (and '\''this'\'')-XJzDF9bj368.mp4'
renamed '9.mp4' -> '9 - Intro to Forms-BVbdZ1133JU.mp4'
renamed '10.mp4' -> '10 - Create React App-5QwNCX3UbXc.mp4'

Вот вставка

rawfiles=(*.mp4); mapfile -t files < <(printf '%s\n' "${rawfiles[@]}"| sort -n); mapfile -t playlistfile < <( sort -n playlist.m3u8); for i in "${!files[@]}"; do  mv -v  "${files[$i]}" "${playlistfile[$i]}"; done
1
28.04.2021, 23:22

Теги

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