Portál AbcLinuxu, 12. května 2025 09:17

Dotaz: Konverze včetně podadresářů

30.5.2018 09:42 Michal Kitta
Konverze včetně podadresářů
Přečteno: 449×
Odpovědět | Admin
Nazdar! Hodilo by se mi, kdyby tenhle skvělý příkaz konvertoval i soubory v podadresářích, nejen v aktuálně otevřeném adresáři. Existuje nějaký způsob? Skript napsat neumím. Díky. Michal

libreoffice --headless --convert-to pdf *.*
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.5.2018 09:51 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Odpovědět | | Sbalit | Link | Blokovat | Admin
find -exec libreoffice --headless --convert-to pdf '{}' +
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
30.5.2018 09:53 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
find -type f -exec libreoffice --headless --convert-to pdf '{}' +
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
30.5.2018 10:03 Michal Kitta
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Díky! To byla rychlost. Nešlo by to, prosím, ještě nějak udělat, aby zkonvertované soubory zůstaly v původních adresářích?
30.5.2018 10:32 Lyco | skóre: 14 | blog: Lyco
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
zkus místo -exec použít -execdir (ale píšu to z hlavy, nezkoušel jsem!)
Příspěvek se rázem stává až o 37,5 % pravdivější, je-li pod ním napsáno reálné jméno.
Josef Kufner avatar 30.5.2018 10:33 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Udělej si malý skript, třeba ~/.local/bin/libreoffice-pdf-export, který spustí export v daném adresáři:
#!/bin/bash
dir="$(dirname "$1")"
file="$(basename "$1")"

cd "$dir" && libreoffice --headless --convert-to pdf "$file"
A pak ho spusť na všem:
find -type f -exec ~/.local/bin/libreoffice-pdf-export {} \;
Všimni si středníku namísto plus, což znamená, že se skript spustí pro každý jednotlivý soubor zvlášť, neboť bere jen jeden parametr.

(A nezapomeň nastavit spustitelnost tomu skriptu: chmod +x ~/.local/bin/libreoffice-pdf-export)

Asi by to šlo nacpat i do toho jednoho findu, ale bylo by to poněkud krkolomné. Ten find si pak můžeš dát do druhého skriptu, abys ho měl příště při ruce.
Hello world ! Segmentation fault (core dumped)
30.5.2018 11:13 Michal Kitta
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Děkuji Vám všem. Vyzkouším. Předávám po létech nějakou práci a zjišťuji, jak jsem byl nedůsledný v ukládání ...
30.5.2018 18:15 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
PDF se na předání práce moc nehodí, je to formát určený spíše pro tisk. Pro tyto účely se dnes spíš používá Markdown, wiki nebo přímo dokumentační aplikace, např. Confluence.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
30.5.2018 15:50 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Odpovědět | | Sbalit | Link | Blokovat | Admin
Používám takovýto skript (recoder265) na konvezi videí
#!/bin/bash

find . -type f -name "*.$1" -exec bash -c '
            i="{}";adr="$PWD/{}"; name=${i%.*}; \
     set -e;
     ffmpeg -hide_banner -hwaccel auto  -i "$i"  -c:a aac -strict -2 -c:s copy -c:v libx265 -preset faster  -x265-params crf=26:ref=4:rd=5:rdoq=1:psy-rd=3:psy-rdoq=10  "$name.h265.mkv";
     touch -r "$i" "$name.h265.mkv";
     rm "$i"' \;
volám ho recoder extenze-videa např recoder265 avi a v tom případě od aktuálního adresáře prochází všechny podadresáře najde v nich soubory s uvedenou extenzí rekonvertuje je do h265, provede změnu datumu rekonvertovaného souboru na původní datum a původní soubor smaže. Vše se děje vždy v příslušném adresáři a zahlubuje se do stromu. změnit ffmpeg na potřebný příkaz a vyhodit rm a případně vyhodit touch.
31.5.2018 17:04 Michal Kitta
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Pokouším se skript upravit podle pokynů, ale nejsem programátor, neumím to. Měl byste na to, prosím, chvilku? Díky.
31.5.2018 20:41 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
zkuste
#!/bin/bash

find . -type f -name "*.$1" -exec bash -c '
            i="{}";adr="$PWD/{}"; name=${i%.*}; \
     set -e;
     cd "$PWD";
     libreoffice --headless --convert-to pdf "$adr"' \;
31.5.2018 20:43 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
a startuje se to s parametrem který je string extenze tedy doc nebo docx
31.5.2018 20:46 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
případně s komentáři
#!/bin/bash

find . -type f -name "*.$1" -exec bash -c '
            i="{}";adr="$PWD/{}"; name=${i%.*}; \
     set -e;
     cd "$PWD";
     libreoffice --headless --convert-to pdf "$adr";
      echo " zkonvertovano $adr"' \;
1.6.2018 10:06 Michal Kitta
Rozbalit Rozbalit vše Re: Konverze včetně podadresářů
Už to funguje, díky. Jenom mi ten skript konvertuje soubory z podadresářů do hlavního adresáře a nemaže ty staré. Ve výpisu vlastností je "vytvořeno 2018", "změněno 1970". Skript od Josefa Kufnera ponechává zkonvertované soubory v původních adresářích a konvertuje všechny extenze najednou. Markdown ... díky za tip, asi potřebujeme ještě trochu zapracovat na osvětě.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.