» »

UNIX, mv, muvanje fajlse

UNIX, mv, muvanje fajlse

bijonda ::

Hallo!

Jaz se vdam. Ze par dni se zezam s tem in mi nic vec ne pade v glavo, kar pa mi pade, ne dela.
V direktoriju moram prebrati file, ki se koncajo s koncajo s .FIN. Npr imam file mx.52164.fin, potem moram stran odrezati ta fin in v istem direktoriju poiskati file, ki bi ustrezal file ki se je koncal z .fin.
Npr. imam file mx.52164.fin, odrezem fin in dobim mx.52164. potem moram najti file mx.52164.dat in vse skupja moram movat v drug direktori!

Evo to je za zdaj moja skripta, zal pomanjkliva:

ls /home/bgw/Ivana1/SAMO1/*FIN | cut -d"." -f1 > fin # tu jih zlistam brez .fin

cat $fin | while read line
do
# tu bi jih morala premakniti, pa mi ne gre
done

Ali bi mi lahko kdo lepo prosim pomagal, ker nimam skoraj nobene ideje vec !

Hvala vse za pomoc!

LP Bijonda

BigWhale ::

Ce ne najdes .dat datoteke kaj moras narediti s tisto .fin datoteko? Jo vseeno prestaviti ali ne?

bijonda ::

Malo prehitro prebrala. :8)
Muvat moram vse fajle ki imajo koncnico fin in tiste ki imajo koncnico dat, ki se ujemajo z fin fajli! Ostale dat fjali pa me ne zanimajo.

Zgodovina sprememb…

  • spremenila: bijonda ()

b ::


DEST=/path/to/destination
cd /path/to/source
for file in *.fin
do
  mv $file $DEST
  mv `basename $file .fin`.dat $DEST
done



Pa ce si pameten, bos pred drugim mv se potestiral, ce file obstaja, sicer ti bo javil error.

Brane2 ::


Pa ce si pameten, bos pred drugim mv se potestiral, ce file obstaja, sicer ti bo javil error.


Potem bi blo verjetno bolje, če bi oba mv-a združil v en stavek:



EST=/path/to/destination

cd /path/to/source

for file in *.fin

do

mv $file $DEST && mv `basename $file .fin`.dat $DEST

done

On the journey of life, I chose the psycho path.

Zgodovina sprememb…

  • spremenil: Brane2 ()

bijonda ::

Zal mi ne dela. Mi javlja napako
mv: cannot access *.fin

Skripta:

DEST=/home/bgw/Ivana1/Samo
cd /home/bgw/Ivana1/SAMO1
for file in *.fin
do
mv -i $file $DEST
mv -i `basename $file .fin`.dat $DEST
done

Sem se nova v pisanje skript v unixu! :D

Brane2 ::

hm, stvar ne expandira filenamea.

Probaj


for file in *.fin


nadomestit z


for file in ./*.fin
On the journey of life, I chose the psycho path.

bijonda ::

tudi ne gre
Tako imam file v direktoriju:
USEX_SML27_20060503144353_CHRG_20060503144353.FIN
USEX_SML27_20060502145929_FREE_20060502145929.DAT.gz USEX_SML27_20060503144425_CHRG_20060503144425.DAT.gz

Upam da vam je zdaj kaj bolj lazje!

Brane2 ::

Čakaj malo. potem končnica ni fin oz dat ampak FIN.gz in DAT.gz .

To bistveno spremeni stvari. Temu ustrezno spremeni program, seveda.

Nekaj v stilu:


DEST=/home/bgw/Ivana1/Samo
cd /home/bgw/Ivana1/SAMO1
for file in *.FIN.gz
do
mv -i $file $DEST
mv -i `basename $file .FIN.gz`.DAT.gz $DEST
done
On the journey of life, I chose the psycho path.

veteran ::

Ej, odloči se že, kakšne pripone imaš. Če imaš .FIN in .DAT.gz potem takole:
for file1 in *.FIN; do
    file2=`basename "$file1" .FIN`.DAT.gz
    mv "$file1" "$dest" 
    if [ -f "$file2" ]; then
        mv "$file2" "$dest"
    fi
done


Kakšen narekovajček je mogoče odveč (preventivno, ker so ljudje zlobni in tlačijo presledke v imena.) :)

BTW, namesto vrstice z basename bi šlo tud tole (mal hitrejše):
file2=${file1%.FIN}.DAT.gz

Zgodovina sprememb…

  • spremenil: veteran ()

bijonda ::

Hvala za pomoc.
Dela!
Jeeee! :P
Kaj se pa koncnic tice, si nisem jaz izmisljevala, temvec moj metor! Sej sem ga zdaj vprasala in je rekel, da bodo dat file vedno zazipani!

Se enkrat najlepsa hvala!

Zelim vam lep dan!

BigWhale ::

Alelujah! ;)


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Bash osnove

Oddelek: Programiranje
241939 (729) Brane22
»

[bash] Sortiranje fotografij po datumu

Oddelek: Programiranje
101383 (944) Mike0
»

[UNIX] arg list too long

Oddelek: Programiranje
331853 (1108) bijonda
»

Ime Priimek v Ime_Priimek (strani: 1 2 )

Oddelek: Programska oprema
554733 (3693) Doman
»

Iz BMP v JPEG.

Oddelek: Programska oprema
61376 (1270) der_Alte

Več podobnih tem