Hromadné přejmenování souboru

xunil

Hromadné přejmenování souboru
« kdy: 17. 03. 2018, 10:40:47 »
Hledám jak hromadně přejmenovat fotky. Dejme tomu, že mám soubory ve tvaru 1000.jpg, 1001.jpg, 1002.jpg.
Pak mám tabulku:sem to nepřejmenovával ručně
1000   ABC07
1001   CDA04
1002   ABC03
ký nás
a potřebuji soubory přejmenovat dle tabulky výše, tak aby jsem nepřejmenoval ručně.
Je na to nějaký nástroj?


yad

Re:Hromadné přejmenování souboru
« Odpověď #1 kdy: 17. 03. 2018, 11:05:47 »
Python, Bash, Powershell.

Python bude najjednoduchší, ak ten súbor s tabuľkou prevedieš do csv.

Kód bude vyzerať potom asi takto (písané z hlavy):
Kód: [Vybrat]
import csv
import os

with open("tabulka.csv", newline="") as f:
    reader = csv.reader(f)
    for row in reader:
        os.rename(row[0], row[1])

Treba si dať ale pozor na to v akom formáte je csv súbor a potom upraviť volanie csv.reader podľa dokumentácie: https://docs.python.org/3/library/csv.html#csv.reader

Ravise

  • ***
  • 113
    • Zobrazit profil
    • E-mail
Re:Hromadné přejmenování souboru
« Odpověď #2 kdy: 17. 03. 2018, 12:36:54 »
Bash. Spoléhá to na spoustu věcí - že v názvu souboru nejsou mezery je určitě ta první věc. Je to narychlo zprasený (určitě je tam něco, co bych dělat neměl), ale na vzorku tabulky to funguje.

Kód: [Vybrat]
cat tabulka | while read line; do from=$(echo $line | cut -d" " -f1); to=$(echo $line | cut -d" " -f2); mv $from.jpg $to.jpg; done

Franta <xkucf03/>

Re:Hromadné přejmenování souboru
« Odpověď #3 kdy: 17. 03. 2018, 13:49:02 »
Hledám jak hromadně přejmenovat fotky. Dejme tomu, že mám soubory ve tvaru 1000.jpg, 1001.jpg, 1002.jpg.
Pak mám tabulku:sem to nepřejmenovával ručně
1000   ABC07
1001   CDA04
1002   ABC03
ký nás
a potřebuji soubory přejmenovat dle tabulky výše, tak aby jsem nepřejmenoval ručně.
Je na to nějaký nástroj?

Pokud je to jednorázová akce, tak bych na to ani nepsal skript – použil bych regulární výrazy v textovém editoru – třeba v Kate – a funkci Najít a nahradit.

Najít: ([^ ]+) (.*)
Nahradit: mv "\1" "\2";

(místo \1 a \2 bývá v jiných editorech $1 a $2 – jsou to odkazy na skupiny v závorkách z regulárního výrazu)

A z toho tvého vstupního souboru ti to vyrobí:

Kód: [Vybrat]
mv "1000" "  ABC07";
mv "1001" "  CDA04";
mv "1002" "  ABC03";

Výsledek si zkontroluješ, případně ještě něco ručně upravíš. A pak už jen vložíš přes schránku to terminálu nebo uložíš jako skript a spustíš.

Nebo pak jsou přímo nástroje na hromadné přejmenování jako KRename. A v tomhle případě by se ti asi víc hodil příkaz vidir z balíčku moreutils. Ten ti otevře seznam souborů (zadaných buď parametrem nebo ze standardního vstupu) v editoru (nemusí to být vim), ty si je v tom editoru přejmenuješ (řádky jsou očíslované, to musíš zachovat) a po uložení a ukončení editoru ti to soubory přejmenuje.

Franta <xkucf03/>

Re:Hromadné přejmenování souboru
« Odpověď #4 kdy: 17. 03. 2018, 14:09:40 »
P.S. pokud máš jako oddělovač víc mezer, tak za tou mezerou v regulárním výrazu mělo být +, aby se nezahrnula to cílového názvu. Tzn. najít: ([^ ]+) +(.*)


Kit

Re:Hromadné přejmenování souboru
« Odpověď #5 kdy: 17. 03. 2018, 14:10:28 »
Kód: [Vybrat]
while read from to; do
    mv "$from.jpg" "$to.jpg"
done <tabulka.txt

xunil

Re:Hromadné přejmenování souboru
« Odpověď #6 kdy: 18. 03. 2018, 11:59:00 »
Díky za rady. Něco vyzkouším. Nejde o jednorázovou akci. CSV není problém (zatím tabulka v Calc). V názvu nejsou mezery. Ještě jednou díky  za nasměrování.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Hromadné přejmenování souboru
« Odpověď #7 kdy: 18. 03. 2018, 12:54:55 »
jak už tu někdo psal, nejlepší je tu tabulku upravit v editoru na script a ten spustit.

kdybys to potřeboval udělat neinteraktivně, tak nějak tak.
Kód: [Vybrat]
cat table.txt | awk '{print "mv "$1".jpg "$2".jpg"}' | bash

Ravise

  • ***
  • 113
    • Zobrazit profil
    • E-mail
Re:Hromadné přejmenování souboru
« Odpověď #8 kdy: 18. 03. 2018, 20:38:22 »
Kód: [Vybrat]
while read from to; do
    mv "$from.jpg" "$to.jpg"
done <tabulka.txt

Je to elegantnější, pravda, moje špagety budou odteď zase lepší (ale stejně si myslím že i když je cat pomalejší, je to drobet přehlednější :) - a v jednom spuštění to stejnak nevadí...)