Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Jak správně sestavit příkaz  (Přečteno 3921 krát)

vasicekabc

Jak správně sestavit příkaz
« kdy: 10 Prosince 2011, 19:39:38 »
Potřeboval bych z nějaké rozsáhlejší adresářové struktury jednoduše zkopírovat všechny soubory do jediného adresáře.

Konkrétně se jedná o fotky a videa, které mám detailně roztříděné do složek, ale potřeboval bych kopii všech těchto souborů v jediném adresáři.

Jako začátečník nevím, jak takový příkaz sestavit, a aby také bylo ošetřeno, že pokud budou mít dva soubory stejný název, jeden z nich se přejmenuje.

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Jak správně sestavit příkaz
« Odpověď #1 kdy: 10 Prosince 2011, 20:25:35 »
Nautilus
 - najet do daného adresáře
 - kliknout na "hledat soubory"
 - do vyhledávacího pole zadat filtr, nebo jen mezeru a Enter
 - rozkliknout ikonku "+" a přidat další filtr (videa apod.)
 - označit soubory a dát zkopírovat

Terminál
Kód: [Vybrat]
find /folder/org -type f -exec cp --force --backup=numbered '{}' /folder/copy \;
« Poslední změna: 10 Prosince 2011, 20:45:33 od daysleeper »

vasicekabc

Re:Jak správně sestavit příkaz
« Odpověď #2 kdy: 10 Prosince 2011, 22:28:19 »
To je přesně ono, to řešení v příkazové řádce jsem hledal.

Děkuji moc

Jen bych ještě poprosil: jak ten příkaz poupravit, pokud bych chtěl vstupních složek více? (např /home/vasek/obrazky i /home/vasek/videa)

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Jak správně sestavit příkaz
« Odpověď #3 kdy: 10 Prosince 2011, 22:38:58 »
Kód: [Vybrat]
find /home/vasek/obrazky /home/vasek/videa -type f -exec cp --force --backup=numbered '{}' /folder/copy \;

vasicekabc

Re:Jak správně sestavit příkaz
« Odpověď #4 kdy: 12 Prosince 2011, 08:20:47 »
Ještě poslední zádrhel: soubory stejného jména tento příkaz přejmenuje tak, že nakonec přidá ~1~
např.: z P4070030.JPG udělá P4070030.JPG.~1~
Bohužel, v této podobě soubor třeba prohlížeč obrázků a jiné grafické aplikace nedokáží otevřít.
Nešlo by nějek zařídit, aby se ono číslování přidávalo za jméno souboru, nikoli až za typ?

Luban

  • Závislák
  • ***
  • Příspěvků: 1638
Re:Jak správně sestavit příkaz
« Odpověď #5 kdy: 12 Prosince 2011, 12:27:57 »
Fotky při stahování automaticky přejmenovávám podle dat z exifu na RRRRMMDD_HHMMSS.jpg. Pravděpodobnost totožných názvů je minimální. Pokud vaše fotky exif mají, asi byl volil nejdříve nejaký script na přejmenování a potom na sesypání do adresáře.

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:Jak správně sestavit příkaz
« Odpověď #6 kdy: 12 Prosince 2011, 17:01:50 »
Tenhle bastl taky funguje.  :-[ ;D
Cesty jsou nastaveny tak, ze se soubory kopiruji z aktualniho do nadrazeneho adresare.

Kód: [Vybrat]
#!/bin/bash
find . -type f | while read F # najde vsechny soubory
do if [ -e "`echo ../"${F##*/}"`" ] # otestuje jestli soubor uz v cilovem adresari neexistuje
then cp "$F" "`echo "${F##*/}" | sed 's#\.#_1\.#' | sed 's#^#\.\./#'`" # jestlize je soubor v cilovem adresari pritomen tak mezi priponu a nazev nove kopirovaneho souboru umisti "_1"
else cp "$F" "`echo ../"${F##*/}"`" # jestli neni tak ho normalne skopiruje
fi
done
« Poslední změna: 12 Prosince 2011, 20:18:30 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

vasicekabc

Re:Jak správně sestavit příkaz
« Odpověď #7 kdy: 12 Prosince 2011, 18:58:12 »
Luban: Právě že o kompletně utříděnou sbírku fotek a pojmenovanou dle dat z exifu jsem vlastní blbostí přišel. Teď jsem ty fotky posehnal zpět z různých zdrojů a chci sbírku znovu sestavit. Bohužel, některé snímky data v exifu nemají, nebo je mají pozměněné. Stejně tak dva totožné názvy neznamenají, že se jedná o stejné fotografie.

Uran: Buď mi ta věc nefunguje, nebo spíš nevím jak ji použít. Kód jsem vložil do prázdného souboru ve složce obsahující všechny složky s obrázky. Soubor označil jako spustitelný a spustil. nejprve mi to hlásilo, že skopiruje není příkaz, tak jsem před tento komentář vložil křížek, nyní to nedělá nic.

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:Jak správně sestavit příkaz
« Odpověď #8 kdy: 12 Prosince 2011, 20:59:00 »
Tak tohle je cistci reseni a pocitato i stim, ze duplicitnich fotek bude i vic nez 1.
Skript se spousti ve slozce a soubory to prekopiruje a prejmenuje do nadrazene slozky. Jen asi neni ostrena situace kdy je v puvodnich fotkach v nazvu ~.
Spoustim to v terminalu a vypada to, ze to funguje.

Kód: [Vybrat]
#!/bin/bash
find . -type f -exec cp --force --backup=numbered '{}' ../ \;

find ../ -type f -iname '*~*' | while read F
do G=`echo "${F%.*}"`
mv "$F" "`echo "${G%.*}""${F##*.}"."${G##*.}"`"
done

Edit: skript nijak neresi situaci kdy se na stejne (aktualni slozce) spusti znovu!
« Poslední změna: 13 Prosince 2011, 07:28:07 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

daysleeper

  • Stálý člen
  • **
  • Příspěvků: 1206
Re:Jak správně sestavit příkaz
« Odpověď #9 kdy: 12 Prosince 2011, 23:46:33 »
nebo třeba takhle (používá mktemp na vytvoření jedinečného jména souboru)
Kód: [Vybrat]
#! /bin/bash

org=/tmp/org
copy=/tmp/copy

if [[ ! -d "$copy" ]] || [[ ! -w "$copy" ]]; then
echo "error: problem with $copy" >&2
exit 1
fi

find "$org" -type f | while read F; do
name="$(basename "$F")"
if [[ -e "$copy/$name" ]]; then
suf=${name##*.}
if [[ "$suf" != "$name" ]]; then
cp_name="$(mktemp "${copy}/${name%.${suf}}_XXXXXX.${suf}")"
else
cp_name="$(mktemp "${copy}/${name}_XXXXXX")"
fi

cp -v "$F" "$cp_name"
else
cp -v "$F" "$copy"
fi
done

exit 0

 

Provoz zaštiťuje spolek OpenAlt.