Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Kaktus 01 Prosince 2012, 13:16:46

Název: skript na automatizovaný přesun souborů [VYŘEŠENO]
Přispěvatel: Kaktus 01 Prosince 2012, 13:16:46
Potřeboval bych poradit s následující úlohou:
mám mnoho souborů v jedné složce (hlavně videa a obrázky) s názvy odpovídajícími datu vzniku (např. 20120711...) a já bych chtěl, kdybych mohl automatizovaně prostřednictvím skriptu, tyto soubory přesunout do složek začínajících prvními 6 znaky (např. 201207) - vznikly by mi tedy složky s názvem roku a měsíce vzniku souborů a v nich by byly jak videa, tak obrázky, tak dokumenty, které v onom měsíci vznikly. Já se dostal až ke skriptu
Kód: [Vybrat]
#!/bin/bash
set -e
for file in *.*; do
  foo=${file%.*}
  mkdir -p ${foo%.*}
  mv $file ${foo%.*}
done

exit 0
Jenomže tenhle mi vytvoří složku pro každý individuální soubor a tam ho přesune. Takže mi vznikne tolik složek, kolik mám souborů. Existuje nějaký parametr, aby to vyvářelo složky jenom z prvních 6 znaků, a tam přesunulo všechny soubory, které ve svém názvu v prvních šesti znacích tyto znaky obsahují?
Název: Re:skript na automatizovaný přesun souborů
Přispěvatel: MacHala 01 Prosince 2012, 15:17:38
muzes pouzit neco ve stylu tohohle:
Kód: [Vybrat]
DIRNAME=`echo "20120711-cokoliv.avi" | sed -r 's/^([0-9]{6}).*$/\1/'`
Název: Re:skript na automatizovaný přesun souborů
Přispěvatel: Kaktus 01 Prosince 2012, 18:05:39
Takže když se to celé "zkompiluje" vznikne
Kód: [Vybrat]
for i in *.*; do
  dir=$(echo "$i" | \
    sed -r 's/^([0-9]{6}).*$/\1/')
  dir="$dir"
  mkdir -p -- "$dir" && mv -uv "$i" "$dir/$i"
done
a to funguje - díky.