Puncte:5

Redenumirea unui fișier folosind numele altui fișier din același folder

drapel in

Am o mie de foldere care conțin două fișiere: unul dintre ele cu un nume aleatoriu (extensie mp4) și celălalt cu un nume (extensie srt).

Intenționez să înlocuiesc numele fișierului generat aleatoriu cu celălalt nume de fișier, păstrând extensia (mp4, mkv sau avi) conținută în același folder. Apropo, numele fișierelor include () și alte caractere străine (ó, ü, etc).

În această situație, scenariul ar trebui, după părerea mea:

  1. Intră în dosar
  2. Obțineți numele cu extensia .srt
  3. Redenumiți fișierul cu extensia mp4 cu noul nume (păstrând orice extensie)
  4. Ieși din dosar
  5. Călătorește recursiv folderele, deoarece poate conține alte subdosare

Al 5-lea pas poate fi anulat, totuși.

Aș aprecia o mână de ajutor. Poate cineva să ajute?

Puncte:3
drapel in

Încercați acest mic fragment,

shopt -s globstar
pentru s în **/*.srt; do
    m=( „${s%/*}”/*.mp4 )
    printf '%s --> %s\n' "${m[0]}" "${s%.*}.mp4"
    #mv „${m[0]}” „${s%.*}.mp4”
Terminat
shopt -u globstar
  • Scoateți # în fața mv dacă rezultatul este conform așteptărilor
  • Dacă există mai multe mp4 într-un singur director, acesta va redenumi numai primul pe care îl găsește. Puteți folosi cu ușurință bucla pentru mv toate mp4-urile și includ un sufix cum ar fi _1 etc.
  • Dacă există mai multe srts într-un singur director, acesta va redenumi mp4-ul de mai multe ori, așa că va fi numit ca cel mai recent srt pe care îl găsește.
Puncte:3
drapel jp

Încercați acest lucru din directorul părinte unde se află celelalte subdirectoare pentru o rulare uscată:

find -type f -name "*.srt" |
în timp ce IFS= citește -r rezultat
    do
    path="${result%/*}"
    fname="${result##*/}"
    name="${fname%.*}"
    pentru fișierul din „$path”/*.{mkv,mp4,avi}
        do
        [ -e „$fișier” ] && echo mv -- „$fișier” „$cale/$nume.${fișier##*.}”
        Terminat
    Terminat

Când sunteți mulțumit de rezultat, eliminați ecou pentru a face redenumirea propriu-zisă.

Vidal avatar
drapel in
Testat si functional. Mulțumesc mult. Am acceptat cealaltă soluție dată pentru că a venit mai devreme. Îmi place propunerea ta, deoarece este mai de înțeles pentru un tocilar (ca mine).
Raffa avatar
drapel jp
@Vidal Ești binevenit... Este plăcerea mea :)

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.