Sziasztok!
Adott egy dir1, dir2, dir3... stb. könytárstruktúra, mindenik tartalmaz x fájlt. Hogyan lehet egy bash scripttel a fájlokat egy "unified" könyvtárba helyezni úgy, hogy az azonos fájlnevek ne íródjanak felül? az is jó, ha a fájlok 0001.x, 0002.x.. stb. neveket kapnak majd, nem kell megőrizni az eredeti neveket. Esetleg a könyvtár neve lehetne a fájlnévben kb. így: dir1-001.x dir1-002.x stb.
Tud valaki segíteni? Előre is köszi.
- 1202 megtekintés
Hozzászólások
-------------------------------------------
#!/bin/bash
echo -n "Forras dir: "
read forras
echo -n "cel dir: "
read cel
count=0
for f in $(find $forras -type f); do
mv -i $f $cel/${f} || mv -i $f $cel/${count}_${f}
count=$(($count+1))
done
---------------------------------------------
A for listajaban levo find a $forras konyvtar
regularis allomanyait listazza relativ eleresi uttal.
A ciklusmag ezeket az allomanyokat atmozgatja.
"||" utani resz: ha az 'mv' sikit (pl filenev egyezes) akkor
a filenev futoszammal kiegeszul.
Ez egy osszecsapott ganyolt megoldás, es nem tul szep.
De alapotletnek biztos jo, te meg majd szepited.
PtR
- A hozzászóláshoz be kell jelentkezni
Köszi, indulásnak jó löket volt. egy baj van, hogy az $f adott pillanatban /usr/share/dir1/valami.f alakja miatt a léztejövő fájlnév nem lesz helyes. Úgyhogy maradtam a simán számozásnál. Köszi a segítséget!
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
A ciklust egészítsd ki így:
for file in $(find $forras -type f); do
f=$(echo "$file" | sed -e 's/.*\///') # így a file-nev tisztan marad
mv -i $f $cel/${f} || mv -i $f $cel/${count}_${f}
count=$(($count+1))
done
bocs, ezt tényleg elfelejtettem
- A hozzászóláshoz be kell jelentkezni
újra csak bocs, az alábbi sor hibás:
"mv -i $f $cel/${f} || mv -i $f $cel/${count}_${f}"
helyesen:
mv -i $file $cel/${f} || mv -i $file $cel/${count}_${f}
kicsit kapkodós vagyok ma...:)
- A hozzászóláshoz be kell jelentkezni