Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: mario 03. 04. 2017, 11:36:57

Název: Náhodný přesun souborů v shell skriptu
Přispěvatel: mario 03. 04. 2017, 11:36:57
Dobry den

Potreboval by som pomoct zo shell scriptom. V linuxe mam zlozku1 vnej sa nachadza (priklad) 1000 jpg obrazkov 20 nahodnych obrazkov potrebujem presunut do zlozky2 ale v zlozke1 sa tychto 20nahodnych obrazkov zmaze cize ich tam bude uz len 980. Vedeli by ste mi niekto poradit ?

Dakujem
Pekny den :)
Název: Re:Pomoc s shell scriptom (vyber suboru)
Přispěvatel: Tuxik 03. 04. 2017, 11:59:41
Kód: [Vybrat]
#!/bin/bash
IMAGES=./data
MOVETO=./data2
HOWMUCH=3

for counter in $(seq 1 $HOWMUCH); do
    FILESCOUNT=$(ls $IMAGES -1 | wc -l)
    if [ $FILESCOUNT -gt 0 ]; then
        FILETOMOVE=$(ls $IMAGES -1 | tail -n +$(( $RANDOM % FILESCOUNT )) | head -n 1)
        mv $IMAGES/$FILETOMOVE $MOVETO
    fi
done

třeba tak...
IMAGES - kde jsou obrázky
MOVETO - kam je přesunout
HOWMUCH - kolik jich přesunout
Název: Re:Pomoc s shell scriptom (vyber suboru)
Přispěvatel: Tuxik 03. 04. 2017, 12:13:01
Možná by bylo lepší ještě přepsat
Kód: [Vybrat]
MOVETO=./data2
na
Kód: [Vybrat]
MOVETO=./data2/protože kdyby adresář data2 neexistoval, ochotně to několikrát můvne do souboru data2 a výsledkem bude několik smazaných souborů a jeden přesunutý do souboru data2.
Název: Re:Pomoc s shell scriptom (vyber suboru)
Přispěvatel: mario 03. 04. 2017, 12:31:27
Kód: [Vybrat]
#!/bin/bash
IMAGES=./data
MOVETO=./data2
HOWMUCH=3

for counter in $(seq 1 $HOWMUCH); do
    FILESCOUNT=$(ls $IMAGES -1 | wc -l)
    if [ $FILESCOUNT -gt 0 ]; then
        FILETOMOVE=$(ls $IMAGES -1 | tail -n +$(( $RANDOM % FILESCOUNT )) | head -n 1)
        mv $IMAGES/$FILETOMOVE $MOVETO
    fi
done

třeba tak...
IMAGES - kde jsou obrázky
MOVETO - kam je přesunout
HOWMUCH - kolik jich přesunout

Velmi pekne dakujem funguje :)  ;)
Název: Re:Pomoc s shell scriptom (vyber suboru)
Přispěvatel: Honza 03. 04. 2017, 12:38:57
proc tak slozite :)

for a in `ls -A /source/ | sort -R | head -n 20`; do
   mv /source/$a /dest/$a
done;