Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: kamara - 18.09.20 - klo:17.58
-
Löytyykö linuxiin valmiina tiedostojen siistijä ?
Käytännössä haluaisin jostakin alihakemistosta siistiä kaikki dublikaatit s.e. ensimmäinen olisi normaali tiedosto, ja kaikki seuraavat samanlaiset tiedostot olisivat vain symbolisia linkkejä ensimmäiseen tiedostoon ?
Olettaisin sellaisen ohjelman olevan melko helppo ohjelmoida, mutta en tiedä millä hakukriteereillä voisi sellaista googlata, enkä ole mielestäni sellaiseen muutenkaan törmännyt.
Siis ongelmana on henkilökohtaisesti, että minulla on noin 10 TB:n kiintolevy, josta on vapaana vajaa 1 TB, ja oletan siinä olevan paljon dublikaatteja, jotka haluan muuttaa s.e. 1. on normaali tiedosto ja loput dublikaatit ovat symbolisia linkkejä 1. normaaliin tiedostoon.
Lisäksi hakusessa olisi ohjelma, jossa näkee esim. 1000 suurinta tiedostoa hakemistopuussa. Voisikohan find:lla onnistua sellainen haku ?
-
Itsellä oli vähän sama ongelma aikoinaan enkä Linux ohjelmien puolelta löytänyt sopivaa mutta onneksi käytössä oli myös Windows kone jolloin pystyin käyttämään CloneSpy ohjelmaa: http://www.clonespy.com/
-
Itsellä oli vähän sama ongelma aikoinaan enkä Linux ohjelmien puolelta löytänyt sopivaa mutta onneksi käytössä oli myös Windows kone jolloin pystyin käyttämään CloneSpy ohjelmaa: http://www.clonespy.com/
Valitettavasti Windows ei ole vaihtoehtojen joukossa, ennemmin teen sellaisen itse, vaikka vielä vähän taitoa asian tiimoilta puuttuukin.
-
Ihan noin kovakouraista en ole kokeillut, mutta tuplien hakuun olen käyttänyt
~# apt search fdupes
Lajitellaan... Valmis
Full Text Search... Valmis
fdupes/bionic 1:1.6.1-1 i386
identifies duplicate files within given directories
-
Olisko FSlint, löytynee ubuntun paketteteista, siinä on kohta kaksoiskappaleet ja yhdistä napiska vihjaa sympolisista ja hardlinkeistä
-
FSlint:llä taitaa pystyä teoriassa tekemään sen, minkä haluan, mutta epäilen GUI-ohjelmien kanssa ollaongelmana muistin riittävyys, sillä kaksoiskappaleen hakemistossa on 10 TB ja Raspberry Pi:ssäni on muistia 2 Gt.
Toisin sanoen hakusessa on kevyt terminaaliohjelma. Tosin näyttää siltä, että olen hankkinut jo tarvittavat tiedot kyseisen ohjelman tekemiseen C++:lla, joten ohjelman keveyskin alkaa olla hanskassa.
Olisin kuitenkin kiitollinen, jos löytyisi pääteohjelma, joka tekee kyseisen.
-
Olisin kuitenkin kiitollinen, jos löytyisi pääteohjelma, joka tekee kyseisen.
Fslint osaa etsiä kaksoiskappaleet myös komentorivillä: https://www.linux.com/news/tidy-your-filesystem-fslint/
Komentorivityökalu ei kuitenkaan taida suoraan tukea tiedostojen korvaamista symbolisilla linkeillä.
Rdfind tekee juuri haluamasi asiat: https://rdfind.pauldreik.se/
-
Rdfind tekee juuri haluamasi asiat: https://rdfind.pauldreik.se/
Kiitokset jälleen nm. 8)
Se taitaa olla juuri se, mitä olen hakemassa...
Ainakaan paketin koko ei ole liian suuri. :)
...
Seuraavat UUDET paketit asennetaan:
rdfind
0 päivitetty, 1 uutta asennusta, 0 poistettavaa ja 0 päivittämätöntä.
Noudettavaa arkistoa 37,8 kt.
...
Edit - Merkkaan ratkaistuksi, kun opin käyttämään kyseistä softaa, ja saan tehdyksi sen, mitä haluan.
-
Edit - Merkkaan ratkaistuksi, kun opin käyttämään kyseistä softaa, ja saan tehdyksi sen, mitä haluan.
Eipäs vielä ratkennutkaan. :'(
rdfind-tekee absoluuttiset symboliset linkit, kun haluaisin suhteelliset symboliset linkit.
Lisäksi jos ohjelman ajaa roottina, niin symboliset linkit tulevat aina root:root-ryhminä ja käyttäjinä, jos ohjelma tekee linkin. Siis optimaalinen tulos olisi, että uudesta symlinkistä tulisi samat ryhmät ja käyttäjät, kuin alkuperäisessä tiedostossakin on.
Ajoin seuraavalla komennolla:
sudo rdfind -makesymlinks true -makeresultsfile true .
Löytyyköhän tähän oma ohjelmansa vai pitääkö tehdä scripti ?
-
Scripti nyt ainakin löytyi...
https://unix.stackexchange.com/questions/100918/convert-absolute-symlink-to-relative-symlink-with-simple-linux-command
find . -type l | while read l; do
target="$(realpath "$l")"
ln -fs "$(realpath --relative-to="$(dirname "$(realpath -s "$l")")" "$target")" "$l"
done
Edit - Nyt Raspberry Pi rupesi raksuttamaan ...
Ennen sitä tein tätä vastaavaa...
sudo ls -lR /media/pi/10Teranen >10TeranenDirnames.txt
... joka auttaneen muokkaamaan oikeudet samoiksi, kun alkuperäisessä hakemistossakin on. Toivottavasti ohjelma ei kaadu kesken urakan.
Edit 2 - Ohjelma ilmoittaa, että todellinen koko on n. 8 TiB eli sen se pystyi ainakin ilmoittamaan ennen kaatumista. Vaikuttaa lupaavalta.
Edit 3 - Lisää tilastoja .. pikkasen vajaa Miljoona tiedostoa, joten käsipelillä parsiminen olisi ollut "hivenen" työlästä.
-
No, nyt tiedostot on siistitty.
Yllättävän nopeasti Raspberry Pi siitä selvisi. Ajattelin, että siinä menisi viikko, mutta Raspberry Pi teki sen muutamassa tunnissa.
Levytilaa vapautui noin 300 Gt, joten operaatio kannatti tehdä. Vielä en ole tehnyt symbolisten linkkien muuttamista absoluuttisista suhteellisiin, mutta uskon siitä selvittävän vieläkin nopeammin.
Kiitokset nm:lle hyvästä vinkistä.