Kirjoittaja Aihe: Tarvitaan taikuria loitsun keksimiseen päätteeseen.  (Luettu 5797 kertaa)

JarTak

  • Käyttäjä
  • Viestejä: 333
    • Profiili
Tuli ostettua uusi kovalevy ja Gpartedilla leikkiessäni tuli Grub rescue teksti vanhaan kovalevyyn. Pari kertaa Boot repair kokeilua ja koko kovalevy oli unallocated tilassa. Testdisk ei pelastanut, joten otin Photorecillä talteen tiedostot kovalevyltä ja imagen koko kovalevystä. Noin miljoona tiedostoa sieltä putkahti, jotka Photorec jakoi yhteensä 2057 eri kansioon.joten niiden selaaminen on vähiintäänkin hiiiidasta ja työlästä. Krename nimisellä ohjelmalla olen kokeillut yhdistää sadan kansion tiedostoja yhden kansion alle(kansiot 1-100, kansiot 101-200 jne..). On kyllä niin hidasta hommaa, että ei millään jaksais manuaalisesti kaikkia järkätä kun nuo sadan kansion yhdistetyt tiedostot avautuu ja toimii järkyttävän hitaasti.

Varmuuskopiot olen ottanut noin puolivuotta sitten, joten kovin paljon arvokasta tavaraa ei ehtinyt mennä hukkaan

/home/omanimi/Palautetut   kansion alla on tällä hetkellä kansiot recup_dir.1 - recup_dir.2057 eli yhteensä 2057 kansiota joista jokainen sisältää palautettuja tiedoston pätkiä. Nuo tiedoston pätkät ovat suurimmaksi osaksi jotain hyödyttömiä muutaman kilotavun jämä tiedostoja joiden perkaaminen vie....no ainakin aikaa.

TEHTÄVÄ 1:
Keksi tai taio päätteeseen jokin scripti jolla voisin poistaa kaikki alle 50 kilotavun tiedostot noista 2057:stä kansiosta.

TEHTÄVÄ 2: Keksi tai taio päätteeseen jokin scripti jolla nuo 2057 kansion kaikki tiedostot saa yhdistettyä yhden kansion alle, jonka nimi olkoon vaikka Palautetut yli 50kt

Luonnollisesti kokeilen ehdottamianne scriptejä pienemmällä eräajolla, sillä sen verran ymmärrän päätettä, että osaan muokata scriptien sisällä olevien kansioiden paikkoja.

Katsotaan millaisia velhoja täältä löytyy;)

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #1 : 03.11.12 - klo:05.36 »
----
TEHTÄVÄ 1:
Keksi tai taio päätteeseen jokin scripti jolla voisin poistaa kaikki alle 50 kilotavun tiedostot noista 2057:stä kansiosta.

TEHTÄVÄ 2: Keksi tai taio päätteeseen jokin scripti jolla nuo 2057 kansion kaikki tiedostot saa yhdistettyä yhden kansion alle, jonka nimi olkoon vaikka Palautetut yli 50kt

Luonnollisesti kokeilen ehdottamianne scriptejä pienemmällä eräajolla, sillä sen verran ymmärrän päätettä, että osaan muokata scriptien sisällä olevien kansioiden paikkoja.

Katsotaan millaisia velhoja täältä löytyy;)

Velhoja odotellessasi kokeile vaikka noita:
Vaihe 1.
Koodia: [Valitse]
find aloitushakemisto -type f -size -50k|xargs ls -l
ja jos näyttää sopivalta niin vaida tuon 'ls -l' tilalle mieleisesi loitsu

Koodia: [Valitse]
Vaihe 2.
find aloitushakemisto -type f|awk '{print "cp -p "$1" kohdehakemisto/."}' > kokoa
ja katso mitä sait tiedostoon kokoa

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #2 : 03.11.12 - klo:11.17 »
Jekun idea on toimiva, mutta laittaisin varoilta pari lisävipusta (siis siltä varalta että nimissä on välilyöntejä).

Hokkus pokkus 1:
Koodia: [Valitse]
find aloitushakemisto -type f -size -50k -print0 |xargs -0 rmtai sitten pelkkä
Koodia: [Valitse]
find aloitushakemisto -type f -size -50k -delete
2.
Koodia: [Valitse]
find aloitushakemisto -type f -size -50k -print0 |xargs -0 -i mv -n '{}' kohdehakemistotai
Koodia: [Valitse]
find aloitushakemisto -type f -size -50k -exec mv -n '{}' kohdehakemisto \;Siirtää kaikki löydetyt kohdehakemistoon. Tai ei välttämättä, koska laitoin tuohon mv komentoon -n vipusen, jolloin kohdehakemistossa olevia teidostoja ei korvata (siltä varalta että on monta saman nimistä, mutta erilaista tiedostoa).

Oikeastaan tuota poistoloitsuahan (1) ei siis tarvitse, jos käyttää mv komentoa kakkosloitsussa.

Lisävahinkojen välttämiseksi käyttäisin silti graafista hakua (nautilus) jolloin voi helpommin seuloa löydetyt.
« Viimeksi muokattu: 03.11.12 - klo:11.22 kirjoittanut retu »

JarTak

  • Käyttäjä
  • Viestejä: 333
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #3 : 03.11.12 - klo:13.25 »
Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find /home/jarmo/testi 1 -type f -size -50k|xargs ls -l
find: "/home/jarmo/testi": Tiedostoa tai hakemistoa ei ole
find: "1": Tiedostoa tai hakemistoa ei ole
yhteensä 156294772


Kaikilla muillakin loitsuilla tulee ilmoitusta että tiedostoa tai hakemistoa ei ole vaikka /home/jarmo/testi 1 hakemisto kyllä on olemassa. Ehdotuksia??

Lainaus
Lisävahinkojen välttämiseksi käyttäisin silti graafista hakua (nautilus) jolloin voi helpommin seuloa löydetyt.


Käytössä on Nautiluksen forkkaus Caja tässä Mintissä, mutta ongelma on siinä että kansioiden alla on niin paljon tiedostoja että kone hidastuu huomattavasti ja 2057 kansion perkaaminen tiedostoineen vie niin paljon aikaa, että helpompi laittaa vaikka yöksi kone tekemään taikojaan.

Kiitokset tähän astisista ja jatketaanpa harjoituksia.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #4 : 03.11.12 - klo:14.34 »
Laita aina lainausmerkkien sisään polku niin ei välilyönti nimessä häiritse eli "/home/jarmo/testi 1 ".  Kuten huomaat virheviestistä niin muuten "find" luulee että sinulla on erikseen jokin toinen tiedosto jonka nimi on "1".
« Viimeksi muokattu: 03.11.12 - klo:14.36 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

JarTak

  • Käyttäjä
  • Viestejä: 333
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #5 : 03.11.12 - klo:15.03 »
Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -print0 |xargs -0 rm
rm: operandi puuttuu
Lisätietoja komennolla ”rm --help”.
jarmo@jarmo-ThinkPad-R61 ~ $

Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f|awk '{print "cp -p "$1" "/home/jarmo/testi 3"/."}' > -50k
awk: (FILENAME=- FNR=1) fatal: division by zero attempted
jarmo@jarmo-ThinkPad-R61 ~ $



Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -print0 |xargs -0 rm
rm: operandi puuttuu
Lisätietoja komennolla ”rm --help”.

Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -delete
jarmo@jarmo-ThinkPad-R61 ~ $



Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi "1 -type f|awk '{print "cp -p "$1" "/home/jarmo/testi "3/."}' > -50k
awk: (FILENAME=- FNR=1) fatal: division by zero attempted

Koodia: [Valitse]
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -exec mv -n '{}' "/home/jarmo/testi 3" \;
jarmo@jarmo-ThinkPad-R61 ~ $

Tuon testi 1 kansion alla on siis kymmenen muuta kansiota joissa kaikissa palautettuja tiedoston pätkiä. Kyllä tää tästä -> Lisää loitsuja kehiin.
« Viimeksi muokattu: 03.11.12 - klo:15.09 kirjoittanut JarTak »

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #6 : 03.11.12 - klo:15.31 »
Hmm... rm herjaa että operandi puuttuu. En oikein keksi tuohon muuta syytä kuin että tiedostoja ei löytynyt. Ehkä ne on jo poistettu. ???

Pelkkä komento
Koodia: [Valitse]
find "/home/jarmo/testi 1" -type f -size -50klistaa hakuehtoa vastaavat tiedostot.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #7 : 03.11.12 - klo:17.13 »
Lainaus
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -print0 |xargs -0 rm
rm: operandi puuttuu
Lisätietoja komennolla ”rm --help”.

Tuolta "rm" komennosta puuttuu muodollinen parametri mikä on helppoa sinne lisätä mutta tuo on yksinkertaisempi kun antaa "find": in tehdä yksinään koko asian (ilman putkitusta xargs/rm) kun ajatuksena oli poistaa ne tiedostot.

Lainaus
jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -delete
jarmo@jarmo-ThinkPad-R61 ~ $
Tuo on oletettavasti tehnyt tehtävänsä.
« Viimeksi muokattu: 03.11.12 - klo:17.16 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

jekku

  • Käyttäjä
  • Viestejä: 2624
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #8 : 03.11.12 - klo:19.27 »
----
Tuolta "rm" komennosta puuttuu muodollinen parametri mikä on helppoa sinne lisätä mutta tuo on yksinkertaisempi kun antaa "find": in tehdä yksinään koko asian (ilman putkitusta xargs/rm) kun ajatuksena oli poistaa ne tiedostot.

jarmo@jarmo-ThinkPad-R61 ~ $ find "/home/jarmo/testi 1" -type f -size -50k -delete
---

Kiitos ja kumarrus, ei mennyt tämäkään päivä hukkaan :)
Oikeasti en ole edes miettinyt onko moinenkin mahdollista, se putkitus tule eihan selkäytimestä.
Kun tuonkin voi toki tarkistaa ennen lisävivun -delete antamista...
« Viimeksi muokattu: 03.11.12 - klo:23.14 kirjoittanut ajaaskel »

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #9 : 03.11.12 - klo:23.51 »
Tässä olisi kopiointi yhteen "Palautetut" kansioon:

Koodia: [Valitse]
mkdir Palautetut && find "/home/jarmo/testi 1" -type f | xargs -n 1 -I {}  cp {} Palautetut
Selitys:  Tuo tekee aluksi "Palautetut kansion paikkaan missä nyt olet ja vain jos tuo onnistui niin etsii sen jälkeen vain tiedostoja tuon "/home/jarmo/testi 1" kansion alta ja kaikista sen alihakemistoista kopioiden ne tuonne "Palautetut" -kansioon.  Jos ihmettelet mikä on tuo kaksi aaltosulkua tuon "cp": n perässä niin ne osoittavat vain paikan minne tuon "xargs": n pitää mättää niitä tiedostonimiä (muodollinen parametri).   Se että "paikanpitäjä" on juuri kaksi aaltosulkua on kerrottu tuolle "xargs" -komennolle tuolla "miinus iso-i aaltosulut" merkinnällä.   Tuo "xargs" saattaa joissain tapauksissa "tökkiä" ja tuon voisi tehdä paremminkin toisella tavalla mutta ei mene noin nätisti sitten yhdelle riville.  Kerro miten kävi.

Edit:  Laitoinpa kasalle sen hieman toisella tavalla ilman "xargs":ia

Koodia: [Valitse]
mkdir Palautetut;  find "/home/jarmo/testi 1" -type f |  while read file; do cp $file Palautetut; done
eikä paljon pidempikään.  Tämä versio yrittää luoda kansion "Palautetut" mutta kävi miten hyvänsä jatkaa eteenpäin (puolipiste tuolla välissä). 
« Viimeksi muokattu: 04.11.12 - klo:00.14 kirjoittanut ajaaskel »
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

JarTak

  • Käyttäjä
  • Viestejä: 333
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #10 : 04.11.12 - klo:01.33 »
Hokkusta pokkusta vaan! Kyllä tässä on käynyt nyt sillä tavalla, että taiat ovat tehonneet. Päätteessä ei oman huomioni mukaan tullut mitään ilmoitusta, että homma olisi suoritettu. Entterin painamisen jälkeen taisi tulla vain jarmo@jarmo-ThinkPad-R61 ~ $ , joten ajattelin komennon epäonnistuneen. Tarkistin kyllä yhdestä kansiosta, että sen koko oli about 370 Mt ennen testiä ja testin jälkeen oli sama lukema, mutta siellä ilmeisesti on ollut vain muutama alle 50kt tiedosto. Tarkempi tarkastelu osoitti että kaikista kansioista oli hävinnyt alle 50kt tiedostot. Tää siis toimii, mutta pitää ottaa vielä yksi eräajo ja katsoa mikä noista komennoista.

Pienenä taka-ajatuksena avun saamisen lisäksi tämän ketjun avaamiselle oli muistuttaa ihmisiä siitä, että päätteellä voi tehdä mitä ihmeellisempiä asioita. Voi tilata vaikka pitsan kotiovelle jos vain osaa. Täytyy kyllä myöntää, että olen yllättynyt tuloksista. Googlasin ja kahlasin että löytyykö erillistä ohjelmaa, mutta eipä löytynyt. Vasta sitten muistin että pääte on keksitty. Se on kuin duunari joka tekee hommat niin kuin käsketään. Pitää osata vain oikeaa kieltä.

Pitää laitta Lenovo yöksi laulamaan loitsuja, niin eiköhän 67 gigan ja miljoonan tiedoston paketti ole aamulla jo hiukan pienempi. Pitää pyytää lisää komentoja teiltä jos vain tarvetta ilmenee. Kiitokset tähän astisista!

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #11 : 04.11.12 - klo:11.57 »
Päätteessä ei oman huomioni mukaan tullut mitään ilmoitusta, että homma olisi suoritettu.

Sehän siinä onkin hauskaa. Jos kaikki menee putkeen, mitään ei huudella, mutta jos jokin epäonnistuu niin heti vingutaan.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #12 : 04.11.12 - klo:11.59 »
Lainaus
Päätteessä ei oman huomioni mukaan tullut mitään ilmoitusta, että homma olisi suoritettu.

Päätekomennot toimivat kaikki hyvin pitkälle "No news is good news"  eli jos ei virheitä niin ollaan hiljaa. Tuohon on ihan syykin: Komentoja on helpompaa silloin ketjuttaa (tosin saa ne turhat viestit kyllä halutessaan ohjattua pois eli komennon lopuksi vielä perään "&>/dev/null" niin ei tule mitään viestejä, tuo ohjaa roskiin niin onnistumis- kuin virheviestitkin.  
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

retu

  • Käyttäjä
  • Viestejä: 949
    • Profiili
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #13 : 05.11.12 - klo:13.14 »
Tuppisuut ohjelmat saa yleensä kertomaan tekemisistään erillisellä parametrilla (usein -v, niinku verbose tai vuolas). Toisinaan vuolas ulosanti voi kuitenkin olla haitaksi. Jos vaikka kopioit hakemistopuuta toisaalle ja jonkin tiedoston kopiointi ei onnistukaan, virheilmoitus hukkuu helposti tiedostonimien sekaan.

Onneksi lähes kaikki ohjelmat palauttavat komentotulkille tilatiedon onnistuiko pyydetty komento vai ei. Tilatieto ei tavallisesti näy käyttäjälle, mutta sitä voi hyödyntää parilla loitsulla vaikka näin:
Koodia: [Valitse]
hymy() { echo -e ":\0$(($??50:51))";}
PS1="$PS1\n\$(hymy) "
... ja tiedät heti paljon paremmin meneekö hyvin vai huonosti ;)

Nuo rivit voi myös lisätä .bashrc tiedoston loppuun, jolloin tilatieto näkyy aina.

Tomin

  • Palvelimen ylläpitäjä
  • Käyttäjä / moderaattori+
  • Viestejä: 11481
    • Profiili
    • Tomin kotisivut
Vs: Tarvitaan taikuria loitsun keksimiseen päätteeseen.
« Vastaus #14 : 05.11.12 - klo:15.33 »
Pidän huomattavasti enemmän tämän näköisestä versiosta, ihan turhaan sitä kahta riviä tuohon tuhlaa:
Koodia: [Valitse]
PS1="[\u@\h \W] \$(hymy) "Tosin Ubuntu-käyttäjillä, jotka ovat tottuneet muutenkin hakemistopolkuihin vastaava lienee:
Koodia: [Valitse]
PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w \$(hymy) "Mutta taidan toistaiseksi jättää hymynaamat pois.

Muuten nopeaan testaukseen voi käyttää false ja true komentoja.
Automaattinen allekirjoitus:
Lisäisitkö [RATKAISTU] ketjun ensimmäisen viestin aiheeseen ongelman ratkettua, kiitos.