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: skript na automatizovaný přesun souborů [VYŘEŠENO]  (Přečteno 1283 krát)

Kaktus

  • Aktivní člen
  • *
  • Příspěvků: 150
skript na automatizovaný přesun souborů [VYŘEŠENO]
« kdy: 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í?
« Poslední změna: 01 Prosince 2012, 18:06:23 od Kaktus »

MacHala

  • Stálý člen
  • **
  • Příspěvků: 1104
  • Big Bro iz watching joo!
    • ZlejT
Re:skript na automatizovaný přesun souborů
« Odpověď #1 kdy: 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/'`
Prislusnik ligy, za kreativni pouzivani interpunkcnich znamenek, carek, predevsim.
=======================================
Tweetuju jako http://twitter.com/zl8

Kaktus

  • Aktivní člen
  • *
  • Příspěvků: 150
Re:skript na automatizovaný přesun souborů
« Odpověď #2 kdy: 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.

 

Provoz zaštiťuje spolek OpenAlt.