Üdv!
További segítséget kérnék...
Segítségetekkel már sokáig eljutottam.
Még azt kellene megoldanom, hogy hogy az adott partíció minden fájlján menjen végig a ciklus, és ha a fájl md5sum összege megegyezik egy bizonyos számmal, akkor törölje az adott fájlt.
Ugyanis azt már sikerült kigyűjtenem, hogy mely fájlok nem kellenek. Ezeknek a fájloknak az md5sum értékét eltároltam egy azonos.txt nevű fájlban, szépen egymás alá felsorolva. (kb. 5000 ilyen fájl van)
Köszönöm annak, aki segít
(eredeti kérdésem ez volt:
Szükségem lenne egy olyan scriptre, ami egy partíción végignézi az összes fájlt, megnézi a bájtra pontos méretét, majd egy szövegfájlba elmenti a fájlok neveit, elérési útjaikkal együtt - méret szerint sorbarendezve.
Akár részmegoldások is segíthetnek...
Köszi a segítséget, visit)
- 2938 megtekintés
Hozzászólások
du -ab | sort -n
du -ab | sort -n | awk {'print $2'}
- A hozzászóláshoz be kell jelentkezni
mi bajod volt a find-al? inkább azt tanulja meg kezdő minthogy pár betűvel rövidebb trükközést ami csak spéci igényre jó, a find elég univerzális
find /adott/particio -type f -printf "%s %p\n" | sort -n >kértfájl.txt
(szebb formázás lesz és a "-n" sem kell feltétlen ha "%s" helyett "%12s")
- A hozzászóláshoz be kell jelentkezni
igaz. de ez egyszerűbbnek tűnt és érthetőbbnek :)
(Mondjuk du esetén a könyváron is lefut.)
- A hozzászóláshoz be kell jelentkezni
azóta szerkesztettem magyarázattal és épp azért szerintem nem érthetőbb
- A hozzászóláshoz be kell jelentkezni
A 'du'-s megoldas output-jaban a directory-k is ott vannak, megpedig nem a sajat meretukkel, hanem a directory alatt levo osszes file-merettel.
szerk.: a 'sparse file'-okrol se feledkezz meg!
- A hozzászóláshoz be kell jelentkezni
mivel olvasni tudok:
...ami egy partíción...
ezért újabb verziójú find kell neked (man find | grep xdev), és egy fontos kapcsolója:
-xdev Don't descend directories on other filesystems.
A többit ollózd ki ügyesen manpage-kből és az előttem hozzászólóktól, google-ból, ne más kaparja ki a gesztenyét neked, kényszerítsd magad a tanulásra!
szerkadd.: nem ártana az inode-okat is kiíratni, és aszerint egy "uniq -u"-t alkalmazni a duplikált fájllistázás elkerüléséhez, barátkozz a "sort -z", "sort -0", a "find -printf0/-print0" kapcsolókkal is, ha korrekt akarsz lenni, és az LC* környezeti változókkal!
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
Azért a find esetében a print* és társai esetében a portábilitást is tessen szem előtt tartani...
- A hozzászóláshoz be kell jelentkezni
Egy kis kiegészítés, hátha nemcsak nekem új, hogy a
find . -type f -print0 | xargs -0 du -b
jellegű megoldás linuxon alapból kihagyja a hardlinkeket.
- A hozzászóláshoz be kell jelentkezni
csak a pontosság kedvéért, fájlok fájlrendszerek fájlszerkezeteiben vannak, nem partíción. A partíció és kötet kicsit tágabb dolgok
- A hozzászóláshoz be kell jelentkezni
Jogos, ott a pont!
De ne vegyük el a kedvét a különböző LVM-ekkel való barátkozástól, pszeudofájlrendszerektől, a GVFS játéktól kezdve a komolyabbakig, vagy attól, hogy okosabb leszálló keresős megoldások már az archív vagy iso, virtuális diszkképfájlokat is automatikusan hurkolva csatolják, kezelik a bind-olt csatolási pontokat, speciális fájlokat, vagy netán attól, hogy partíción/szubpartíción belül több fájlrendszer is létezhet párhuzamosan, nem feltétlen egymásba ágyazva...
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
lentebb látod hogy mi a feladat, ráadásul még kezdő is...szokott itt lenni a hozzáértők részéréől egy kis "versengés" szebb, jobb kódért.. ilyen esetek amiket írtál messze túlmutat a feladaton, szóval ezeket nem leírni hanem kivitelezni illene ide ;)
- A hozzászóláshoz be kell jelentkezni
szokott itt lenni a hozzáértők részéréől egy kis "versengés"
Elég baj az állítólagos versengés léte! Honnét tudod, hogy nem beadandót oldanak-e meg? Nem halat, hanem hálót kell az ifjú padawanoknak adni. Igaz, hogy a jelen szituációban vélelmezhető értelmes és (másnak) viszonylag nehéz feladat esetén az, hogy nem óvodai beadandóhoz szólunk hozzá, azaz nem tisztességtelen plecsniszerzés célból közölte a topiknyitó a feladatot :)
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
Mindannyiótoknak köszönöm!
Ezekből már össze tudom ollózni, amire szükségem van.
Köszönettel: visit
szerk.: nem suliba kell, hanem magamnak. Az is lehet, hogy rossz úton indultam el: a végcél, hogy egy igenis PARTÍCIÓN megtaláljam a fájlduplikátumokat. Rengeteg mentést készítettem adataimról, képeimről, stb. Ez az idők folyamán nagyon elterebélyesedett, és követhetetlen, mi hol van meg, és hányszor... Vannak képek, amiket már át neveztem, talán nem is egyszer, és most törölni akarom a az "egynél több előfordulásúakat" ... :-)
- A hozzászóláshoz be kell jelentkezni
akkor inkább md5-el (vagy más hashel ha tárolsz ütköző fájlokat:) ) keresd, kb:
md5deep -r * /particio | uniq -w 32 --all-repeated=separate
persze ezt lehet kombinálni a fájlmérettel, vagy lehet akár célprogramot is használni: http://www.pixelbeat.org/fslint/
- A hozzászóláshoz be kell jelentkezni
md5sum helyett cksum-ot javaslok, mert gyorsabb. cksum egyezés után meg "diff" parancs használatát javaslom.
Hasonló megfontolásból elkövettem anno duplikáltszűrő purgáló szkriptet saját mp3, s3m, it, bmx/bmw nótákra kisujjból előráztam úgy, hogy hibatűrően működött szóközös-újsoros fájlnevekre is, utána még kb. óráig futott a purgálás.
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
md5sum helyett cksum-ot javaslok, mert gyorsabb.
oke, de ott mar azert egy collision elegge valoszinu (kb 2^{-16} ~ 10^{-6} az eselye, ennyi file van kb nagysagrendileg egy atlagos rendszerben).
- A hozzászóláshoz be kell jelentkezni
és ez hogy jön ide? mondta hogy utána bitre megnézi az eltérést, azaz pontosan csak olyan gyorsításnak szánja mint hogy előbb az azonos fájlméreteket nézi, azok is ütközhetnek, de utána egy jó hashel már nem kell olyan sokat összehasonlítani
- A hozzászóláshoz be kell jelentkezni
jaja, megelőztél.
2 alapvető metaalgoritmus lehet.
Egyik: egyetlen egyszer nézzük végig a fájlokat, és mindegyikről lenyomatot veszünk/összehasonlítjuk a korábbiakkal. Ez O(n*n) lépésidejű és lassú a gyakorlatban is, viszont csak egy rekurzív könyvtárbejárás az egész.
Az itt ismertetett jobb megoldási ötletek egy find-dal előszűrnek (find itt sem kell egynél több, csak többszöri fájlnyitogatás), és igen, a cksum olcsóbb hash.
Javasolt lépések:
1. könyvtárkeresés, méretek begyűjtése
2. azonos méretűek csoportosítása ( sort -z| uniq -z -w20)
3. azonos méretűek közül lenyomatok generálása, lehetőleg olcsó hash-sel , hogy gyors legyen
4. az azonos méretű és azonos lenyomatú fájlok közül páronkénti összehasonlítás a listák alapján
aki bátor, és nem atomerőművi adatokkal dolgozik, annak páronkénti összehasonlítás helyett ajánlott tipp egy második, sha* lenyomat elkészítése és a listák uniq-olása
szerk.
http://www.youtube.com/watch?v=QXz7-BNC6jw
http://nocirc.org/
- A hozzászóláshoz be kell jelentkezni
"olcsóbb": relatív, gpgu megoldás létezik md5-re :)
- A hozzászóláshoz be kell jelentkezni
Az md5 már más eredményt ad, ha a név más . Vagy nem? Mondtam, van sok olyan kép, aminek csak a neve különbözik.
No és még egyszer mondom, nem iskolai feladat... sőt nem is ifjú titán vagyok, hanem egy 52 éves műkedvelő :-)
üdv, visit
- A hozzászóláshoz be kell jelentkezni
nem, az md5 nem néz semmit, az csak egy hash fajta :)
implementációk bitekre lkalmazzák az md5-öt, és szinte mindig csak a fájltartalmat nézik, tehát a tipikus md5sum program(ok) is
tehát amit te kértél arra alkalmas
- A hozzászóláshoz be kell jelentkezni
az én megoldásom. ez csak az egyező fájl méretűeknél csinál hash ellenőrzést.
de erre van cél program is, és nagyon gyors: fdupes.
- A hozzászóláshoz be kell jelentkezni
Ez jó!
Köszi érte, hogy megosztottad!
- A hozzászóláshoz be kell jelentkezni
Lehetőleg ne awk-val... :-(
- A hozzászóláshoz be kell jelentkezni
mi a gond az awk-al?
ezek (similar alattiak) sem jók:
http://en.wikipedia.org/wiki/Fdupes
- A hozzászóláshoz be kell jelentkezni
man find; man sort; use brain
- A hozzászóláshoz be kell jelentkezni
miért egy konkrét partíció érdekes egyébként?
Én pl. egy hasonló cuccot két dologra használok:
-egy filesystemen belül megvan-e ugyanaz többször, ha igen, akkor törlök, vagy hardlink.
-valamiről van-e másik filesystemen másolat, mégpedig mennyi, és merre - amiről nincs, arról készítek, amiről túl sok van, abból meg gyomlálok.
G
- A hozzászóláshoz be kell jelentkezni
Mert ez van a kiadott feladatban :-P
- A hozzászóláshoz be kell jelentkezni
Miért egy partíció érdekes? - Mondhatnék egy másik wincsesztert is. A lényeg, hogy két wincseszterem van, és az egyikre szeretném összeválogatni a fájlokat. Az újra. A régin pedig több partíción, össze-vissza könyvtárakban némely fájl többször is meg van. a gyári programok megtalálják ugyan a duplikátumokat, de nem tudom, csak egyesével törölni, hiszen át kell néznem, hogy melyik kell. De mint mondtam, odáig már eljutottam, hogy meg van egy fájlban a törlendő fájlok md5sum összegei. Csak azt nem tudom megírni, hogy azokat egy script törölje.
U.I.
Mint már mondtam, nem iskolai feladat. Egyszerűen én nem tudom megírni. Ezért kértem segítséget.
- A hozzászóláshoz be kell jelentkezni
fdupes tud interaktív módon törölni.
-d --delete
prompt user for files to preserve, deleting all others (see CAVEATS below)
- A hozzászóláshoz be kell jelentkezni
Köszi, ezt tudom, de nekem kb 5000 Fájlom van, amit törölni kellene... interaktív módon elég lassú....
- A hozzászóláshoz be kell jelentkezni
"odáig már eljutottam, hogy meg van egy fájlban a törlendő fájlok md5sum összegei"
ez a fájl hogyan néz ki? md5 érték + fájlnév soronként? írd le hogy hogyan tartalmazza a fájlokat, és hogy mi alapján kellene törölni belőle, akár az összeset, és összedobjuk a script-et.
- A hozzászóláshoz be kell jelentkezni
köszi!
Tehát ez a fájl egy normál txt fájl, ami egy sorban egy 32 karekter hosszúdágú md5sum összeget tartalmaz, majd jön a következő sor, és így tovább.
Ezzel a sorral hoztam létre:
find ! -type d -print0 | xargs -0 md5sum | sed "s/\s.*//" > md5sum210.txt
azután a másik vinyón is megcsináltan ugyanezt, majd az azonos sorokat meghagytam egy harmadik fájban. Így most van egy olyan fájlom, ami csak a tiszta md5sum összegeket tartalmazza, szépen, soronként.
Azokat a fájlokat kellene törölni, amelyeknek az md5sum összege megtalálható ebben a fájlban.
egy 210Gb-os hdd és egy 290Gb hdd-n futtatva ezeket:
find ! -type d -print0 | xargs -0 md5sum | sed "s/\s.*//" > md5sum210.txt
és
find ! -type d -print0 | xargs -0 md5sum | sed "s/\s.*//" > md5sum290.txt
majd összehasonlítottam őket, és az azonosakat megtartottam:
cat md5sum210.txt | while read L; do cat md5sum290.txt | while read K; do
if [ "$L" = "$K" ]
then echo $K
fi
done
done >azonos.txt
most tehát az azonos.txt fájlban vannak tárolva a törlendő md5sum-os fájlok, a 210Gb-os hdd-ről.
Még egyszer köszönöm!
- A hozzászóláshoz be kell jelentkezni
sok fajta megoldás szóba jöhet. most hamar gyorsan így csinálnám:
tehát az azonos.txt csak md5sum összegeket tartalmaz, soronként. azokat a fájlokat szeretnéd törölni, amelyeknek az md5 összege benne van ebben a txt fájlban.
hogy melyik könyvtártól lefelé rekurzív módon törölnéd, azt nem tudom, legyen most ennek a helye: /media/dir
fontos: teszteljed mielőtt élesben ráengeded és mentésed legyen!
#!/bin/bash
DIR="/media/dir"
SAM="azonos.txt"
TMP=$(mktemp)
# lista az összes fájlról a mappán belül
find "$DIR" ! -type d -print0 | xargs -0 md5sum | sort > "$TMP"
# keressük meg az azonos.txt összegein egyesével lépkedve a megegyezőket
cat "$SAM" | sort | while read FF; do
# ha több is egyezik, akkor mindegyiken végig lépkedünk megint
grep "$FF" "$TMP" | while read F2; do
# az egyezőknél csak a fájlnév kell
DEL=$(echo "$F2" | grep -iEo "/.*$")
echo "$DEL"
# törlés
#rm -f "$DEL"
done
done
- A hozzászóláshoz be kell jelentkezni
Mindenek előtt mindenkinek köszi, hogy segítetek.
log69: sajnos nem igazán értek mindent, amit írtál, de most googlizok, meg "man"-ozok, hogy megértsem.
A kiinduló könyvtár maga a gyökér: "/", mert a teljes partíciót végignézem. Ekkor tehát a sripted első sora így fest, igaz?: DIR="/" És magát a scripted a gyökérbe másolom, és onnan indítom.
pme: a comm-ról azt találtam, hogy "sorrol-sorra" összehasonlítja a két fájlt.Ha mondjuk az egyik fájl első sora megegyezik a második fájl hatodik sorával, akkor is kiadja eredménynek a megegyezést?
- A hozzászóláshoz be kell jelentkezni
A ket file-nak sorrendezettnek kell lennie, ezert a 'sort' a 'find'-ok vegen.
- A hozzászóláshoz be kell jelentkezni
ok, közben megtaláltam a man-ban, köszönöm szépen. Mindnyájatoktól sokat tanultam. De még biztos jövök kérdezni :-)
- A hozzászóláshoz be kell jelentkezni
find ! -type d -print0 | xargs -0 md5sum | sort >md5sum210.txt
find ! -type d -print0 | xargs -0 md5sum | sort >md5sum290.txt
comm -12 md5sum210.txt md5sum290.txt >azonos.txt
- A hozzászóláshoz be kell jelentkezni
fdupes -fnr . >duplicates
A duplicates fájlba kerülnek azok a fájlnevek, melyek másodszor fordulnak elő. A keresés md5sum alapján történik. Ha az a cél, hogy töröljük a cuccaink közül a felesleges másodpéldányokat, akkor
cat duplicates | xargs rm
Persze előtte illik átnézni a duplicates fájlt:)
- A hozzászóláshoz be kell jelentkezni