Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Skript na smazani docasnych souboru  (Přečteno 9604 krát)

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Skript na smazani docasnych souboru
« kdy: 30 Prosince 2007, 20:11:31 »
Dobry den, poradite mi prosim jak vytvorit skript, ktery pri startu systemu smaze z me domovske slozky vsechny docasne soubory (koncici ~) a to rekurzivne ve vsech podadresarich a navic aby jeste smazal slozku ~/lexicon , ktera se tam porad vytvari. Dekuji.

pooh

  • Návštěvník
  • Příspěvků: 17
Re: Skript na smazani docasnych souboru
« Odpověď #1 kdy: 30 Prosince 2007, 20:17:39 »
podívej se na man rm, soustřeď se na parametry r a f. a hlavně to nepouštěj pod rootem.
Notebook 12,1" MSI S271X-Orange, 2GB RAM, AMD Sempron 3400+ (1,8 GHz), 100GB; Ubuntu GG

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Re: Skript na smazani docasnych souboru
« Odpověď #2 kdy: 30 Prosince 2007, 20:28:08 »
Ja se dival, smazat soubor umim i slozku rekurzivne. Jde mi o to jak ten skript spoustet automaticky po startu systemu a jak smazu vsechny soubory ktere konci na ~. Poradite mi prosim?

pooh

  • Návštěvník
  • Příspěvků: 17
Re: Skript na smazani docasnych souboru
« Odpověď #3 kdy: 30 Prosince 2007, 20:38:26 »
rm akceptuje parametr/nazev pro smazani, afaik podporuje wildcards. vygoogli si /etc/rc.local
Notebook 12,1" MSI S271X-Orange, 2GB RAM, AMD Sempron 3400+ (1,8 GHz), 100GB; Ubuntu GG

Peterx

  • Aktivní člen
  • *
  • Příspěvků: 403
Re: Skript na smazani docasnych souboru
« Odpověď #4 kdy: 30 Prosince 2007, 21:27:01 »
To mazanie ide  napriklad takto: find /home/cesta/ -name *~ | xargs rm -f
Staci prikaz zadat spustat po startu System - preferencs - sessions

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Re: Skript na smazani docasnych souboru
« Odpověď #5 kdy: 01 Ledna 2008, 19:53:01 »
a neslo by to jen pomoci:

rm -fR ~/*~

?

Duffy

  • Aktivní člen
  • *
  • Příspěvků: 436
Re: Skript na smazani docasnych souboru
« Odpověď #6 kdy: 02 Ledna 2008, 00:57:13 »
a neslo by to jen pomoci:

rm -fR ~/*~

?

Proč? Já bych myslel že jenom

rm -fR *~

EDIT: Už vás chápu, vy myslíte ~/ jako domovský adresář. To je v tomhle kontextu trošku matoucí :).
Notebook Fujitsu Siemens Amilo Xa 1526 s Ubuntu 8.04. Po dlouhém zkoušení jsem zůstal u Ubuntu a GNOME.

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Re: Skript na smazani docasnych souboru
« Odpověď #7 kdy: 03 Ledna 2008, 15:24:21 »
A co je tedy lepsi?

rm -fR ~/*~

nebo

rm -fR *~

tedy spise je v tom nejaky rozdil?

Duffy

  • Aktivní člen
  • *
  • Příspěvků: 436
Re: Skript na smazani docasnych souboru
« Odpověď #8 kdy: 03 Ledna 2008, 15:37:01 »
Neměl by být, jestli jsem dobře pochopil kolegu tak ~/ nahradíte cestou k vašemu domovskému adresáři ( třebas /home/tux ).
Notebook Fujitsu Siemens Amilo Xa 1526 s Ubuntu 8.04. Po dlouhém zkoušení jsem zůstal u Ubuntu a GNOME.

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #9 kdy: 03 Ledna 2008, 15:53:31 »
#!/bin/bash
#
# This script hopefully cleans $HOME by temp files ending '~'
# This kind of files should be moved into $MY_TEMP
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# Author: nettezzaumana <root@proximasociale.cz>
#
####################################################################################

# Function Section:

# make cycle, which hopefully should substitute $HOME >> $MY_TEMP and place
# suggested files there includes their subdirectories from $HOME.
# This avoids replacing file with same names, if ordered to
# keep them in one temporary directory.
SKEL() {

# cut from full path to '~$' file $HOME/
# there is conspious, that we can use in RE '|' insted of '/' with same affect
SUBJ=$(echo "$1" | sed "s|$HOME||;s/^\///");

# make 'for' cycle with same number of rounds such a fields (separated via '/')
# in shortened path to temp file.
# In 'awk' 'NF' = "Number of Fields", which is internal variable..
for x in $(echo $SUBJ | awk -F/ '{for(x=1;x<NF+1;x++) {print $x; }}'); do

    # check if it is not tempfile to save
    if [ -z "$(echo "$x" | grep -E '~$')" ]; then
      # use MY_TEMP variable in this case as local-one for this function
      local MY_TEMP=$MY_TEMP/$x;

        # check if suggested directory was not previously created
        # and if not (!), let's do that
        if [ ! -d "$MY_TEMP" ]; then
      mkdir $MY_TEMP
        fi

    # if it is file to save, move it into right place
    else
      mv "$1" "$MY_TEMP";
    fi
done
}

####################################################################################
#####################################################################################
# Main Script:

# declare at first current, old and added temp directory
MY_TEMP=$HOME/.my_tmp_dir-$(date +%d.%m.%y-%H%M%S);
OLD_TEMP=$HOME/$(ls -a $HOME | grep -E 'my_tmp_dir');
ADD_TEMP="$HOME/lexicon";

# check, if exists some new waste
if [ -z "$(find ~ | grep -E '~$' | grep -Ev '\.my_tmp_dir')" ]; then
  echo "nothing to clean.. exiting now";
  exit 0;
fi

# current tempdir should be created here
mkdir $MY_TEMP;

# find all files in current $HOME ending '~' and move them into current tempdir
# SKEL function should make subdirectories in substitute order $HOME >> $MY_TEMP
for x in $(find ~ | grep -E '~$'  | grep -Ev '\.my_tmp_dir'); do
SKEL $x;
done

# waste should not survive here
rm -fr $OLD_TEMP;
rm -fr $ADD_TEMP;

exit 0;

« Poslední změna: 04 Ledna 2008, 21:34:05 od nettezzaumana »

Duffy

  • Aktivní člen
  • *
  • Příspěvků: 436
Re: Skript na smazani docasnych souboru
« Odpověď #10 kdy: 03 Ledna 2008, 17:25:29 »
Jo profík se pozná :), tleskám :).
Notebook Fujitsu Siemens Amilo Xa 1526 s Ubuntu 8.04. Po dlouhém zkoušení jsem zůstal u Ubuntu a GNOME.

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #11 kdy: 03 Ledna 2008, 17:45:14 »
+okomentovano
+doplnena podminka "pokud existuje novy odpad" ..
+oprava vyse zminene podminky -- excludujeme $OLD_TMP
+predelan sled akci (odstraneni stare tmpdir) az na zaver -- je to potom logictejsi & 'more secure'
+odstranena chyba, diky ktere by $TMP_DIR stale rostla, pac stare '~$' z $OLD_TMP by se presouvaly do nove
+pridana promena ADD_TEMP, do ktere jde napsat treba takova slozka ~/lexicon
+to nejdulezitejsi na konec:: pridana hlaska o licenci GPL ;)

enjoy by ntz

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Re: Skript na smazani docasnych souboru
« Odpověď #12 kdy: 03 Ledna 2008, 17:45:53 »
nettezzaumana: no skoro jako moje rm -fR ~/*~, jen takove.... rozpracovanejsi :D Dekuji moc. Ted me ale napadlo ze mozna lepsim reseni by bylo nastaveni, aby vsechny docasne na ~ koncici soubory byly nastaveny jako skryte, tzn ze by tam vlastne porad byly, jen by pri praci nezavazely, jde neco takoveho nastavit?

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #13 kdy: 03 Ledna 2008, 17:58:45 »
dyk ono ti to ty skryte nemaze, jen je presouva do skryteho adresare ~/.my_tmp_dir-"date flag"

muzes si treba zakomentovat ?3 radek od konce 'rm -fr $OLD_TEMP a budou se ti vytvaret skryte adresare dle data pouziti, obsahujici nove '~$' soubory

pripadne si muzes skript jakkoliv rozsirit a upravit, protoze ::
because this program is under GPL license, feel free to edit & modify it to comply all your needs ;)

enjoy by ntz
« Poslední změna: 03 Ledna 2008, 18:00:20 od nettezzaumana »

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #14 kdy: 03 Ledna 2008, 18:09:11 »
ps. a co se tyce startu systemu::

bud spoustej script v ramci cron (umisti script do /etc/cron.daily) a nebo
umisti skript do /etc/init.d/ a nainstaluj balik rcconf $(apt-get install rcconf) a pote, co ho spustis prikazem 'rcconf' (jak jinak) zaskrtni jmeno skriptu..

nejlepe ho ulozis tak, ze ho cutnes a pastnes nekam a nebo udelas:
(jako root)
cat << 'EOF' >/etc/init.d/tmp_cleaner.sh && chmod +x /etc/init.d/tmp_cleaner.sh // naskoci ti radek se znakem '>', tam pastnes skript, odklepnes 2x enter (pro prazdne radky na konci) a napises EOF a odklepnes .. (a samozrejme prozenes vyse zminenym rcconf)

that's it

zdravi ntz

Marvn

  • Stálý člen
  • **
  • Příspěvků: 627
  • Take it easy :)
Re: Skript na smazani docasnych souboru
« Odpověď #15 kdy: 03 Ledna 2008, 18:13:12 »
hh...tolik prace se scriptem a pritom je to tak snadne :D
Arch Linux x64 (KDE) | KISS  :-*
"Ignorance isn't stupidity, but choosing to remain ignorant is."

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #16 kdy: 03 Ledna 2008, 18:20:19 »
huh -- zase tolik prace snad ne.. 10min neni tak moc.
a pokud si to krome uziti jeste navic nekdo precte a inspiruje ho to k necemu vlastnimu, pripadne k modifikaci (a nejlepe se na tom neco priuci), tak to stalo 100% za to.

zdravi ntz

Linux je mocnej -- a obcas je jeste mocnejsi ..

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript na smazani docasnych souboru
« Odpověď #17 kdy: 03 Ledna 2008, 18:42:32 »
proc psat dlouhe skripty? soubory v domovskem adresari (a podadresarich) koncici na ~ smaze proste
Kód: [Vybrat]
$ find ~ -name '*~' -exec rm {} \;
find je mocny.

Slozku ~/lexicon smaze
Kód: [Vybrat]
$ rm -r ~/lexicon

Takze ten komplikovany skript by mohl vypadat
Kód: [Vybrat]
#!/bin/bash
find ~ -name '*~' -exec rm {} \;
rm -r ~/lexicon

Rezorcinol

  • Návštěvník
  • Příspěvků: 63
Re: Skript na smazani docasnych souboru
« Odpověď #18 kdy: 03 Ledna 2008, 19:35:02 »
kkaarreell: No mas pravdu, funguje to take, ale ten skript by nettezzaumana ma mnohem vetsi informacni/studijni hodnotu, takze jeste jednou diky za nej!

Marvn: No ja s tim rm moc neexperimentoval aby to nedopadlo prave tak:D

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript na smazani docasnych souboru
« Odpověď #19 kdy: 04 Ledna 2008, 09:25:56 »
Jasne, vsak kazdemu vyhovuje neco jineho. Ale kdyz uz mluvime o studijni hodnote, tak si zapamatuj hledani souboru konkretniho nazvu pomoci parametru "-name"
Kód: [Vybrat]
$ find KDE_HLEDAT -name 'MASKA_NAZVU'
nez to "zvrhle" ze skriptu (nic proti :-) )
Kód: [Vybrat]
$ find KDE_HLEDAT | grep ....
A kdyz uz musim prochazet vysledek predchoziho prikazu grepem, tak je slusnost presmerovat chybovy vystup predchoziho prikazu (treba do /dev/null), aby se nam do toho nemotal.

A jeste jedna poznamka. To zalohovani souboru funguje trochu polovicate. Pokud budes mit vic souboru stejneho jmena (v ruznych adresarich), typicky napriklad "index.html~", "style.css~", atd., tak se pri presouvani ty jednotlive soubory prepisuji a "prezije" jen ten posledni. Takove zalohovani moc smysl nema. Chapu, ze te to asi netrapi, kdyz jsi to chtel smazat. Ale jako vhodnejsi reseni mi v tomto pripade pripadne ziskat seznam souboru, ty pak zkomprimovat do archivu (treba tar, gzip), a puvodni soubory smazat. Ale to jen tak na okraj, ze studijnich duvodu. Spis bych ti doporucil serial o BASHi (na linuxexpres.cz), nez studovat spatne priklady zde na foru. Tim nemyslim diskutovany skript, spis obecny jev zde na foru, kde se, co se tyce skriptu, objevuji "sbastlena" reseni, z nichz drtina vetsina ani nefunguje.
« Poslední změna: 04 Ledna 2008, 09:37:21 od kkaarreell »

Marvn

  • Stálý člen
  • **
  • Příspěvků: 627
  • Take it easy :)
Re: Skript na smazani docasnych souboru
« Odpověď #20 kdy: 04 Ledna 2008, 13:14:59 »
mno...ono prezije pouze to, co se aktualne zalohuje, pac to jde do noveho adresare a stary se smaze...takze pro plne zalohovani staci odkomentovad prisluny radek, aby se stare zalohy nemazaly :)
jinak kazdy ma svuj styl psani, ktery je lepsi se neda moc urcit, mozna podle slozitosti algoritmu a i to ma zase vyznam jen neky :D
Arch Linux x64 (KDE) | KISS  :-*
"Ignorance isn't stupidity, but choosing to remain ignorant is."

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript na smazani docasnych souboru
« Odpověď #21 kdy: 04 Ledna 2008, 14:18:52 »
mno...ono prezije pouze to, co se aktualne zalohuje, pac to jde do noveho adresare a stary se smaze...takze pro plne zalohovani staci odkomentovad prisluny radek, aby se stare zalohy nemazaly :)
Ty jsi me nepochopil. Jde o to, ze se ty soubory kopiruji/presouvaji do jednoho adresare, tj. nezachovava cesty. Takze kdyz mas na disku vice RUZNYCH souboru TEHOZ JMENA, ktere se zalohuji (u webovych stranek to je typicky index.html, ale muze to byt i makefile tvych programu, readme.txt, ci jakykoliv jine soubory, pro nez se pouzivaji ustalene nazvy), tak se zazalohuje jen ten jeden soubor, ktery se kopiroval/presouval jako posledni, jelikoz se budou behem zalohovani neustale prepisovat. Rozumis?
« Poslední změna: 04 Ledna 2008, 14:21:12 od kkaarreell »

nettezzaumana

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #22 kdy: 04 Ledna 2008, 17:28:00 »
mno...ono prezije pouze to, co se aktualne zalohuje, pac to jde do noveho adresare a stary se smaze...takze pro plne zalohovani staci odkomentovad prisluny radek, aby se stare zalohy nemazaly :)
Ty jsi me nepochopil. Jde o to, ze se ty soubory kopiruji/presouvaji do jednoho adresare, tj. nezachovava cesty. Takze kdyz mas na disku vice RUZNYCH souboru TEHOZ JMENA, ktere se zalohuji (u webovych stranek to je typicky index.html, ale muze to byt i makefile tvych programu, readme.txt, ci jakykoliv jine soubory, pro nez se pouzivaji ustalene nazvy), tak se zazalohuje jen ten jeden soubor, ktery se kopiroval/presouval jako posledni, jelikoz se budou behem zalohovani neustale prepisovat. Rozumis?
.. ja jsem jsem te asi taky nepochopil karliku, nebude to tim, ze Ty budes asi seredny hovado? -- parkrat uz jsem tady videl tvuj konfrontacni a arogantni ton a nic moc -- muzu rict .. bez si ty tupej experte radit aka ::
Citace: moula.khaarlik
..tak si zapamatuj..
nekam jinam, pac slusnej clovek hleda via:
find /home/u/tupeho/karlika | egrep '~$' // 3x 'LOL' na tvoji nevymachanou hubu

zdravi ntz

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript na smazani docasnych souboru
« Odpověď #23 kdy: 04 Ledna 2008, 19:17:41 »
Drahy nettezzaumane:
Take jsem si te vsiml. Nejsi vsevedouci, ale nedokazes si to pripustit a kdyz te na omyl nekdo upozorni, reagujes pozdrazdene.

Pokud jsi muj komentar nepochopil, svedci to spise o tvych znalostech ci mozkove kapacite. Kazdy krome tebe vi, ze kdyz do jednoho adresare kopirujes dva soubory tehoz jmena, tak tam nejdriv zkopirujes ten prvni a kopirovanim toho druheho ten prvni prepises. Tudiz mas jen ten druhy a ten prvni je ztracen.
A ruzne soubory stejneho jmena maji uzivatele na disku celkem bezne, staci, kdyz napriklad delaji html stranky ci programuji. Uz fakt nevim, jak jinak to napsat. VZDYT JE TO TAK JEDNODUCHE!!!

Citace
find /home/u/tupeho/karlika | egrep '~$
Tato cast prispevku je jen dalsi dukaz tve ubohosti. Ja tomu prikazu rozumim a vim, ze z predchoziho vyfiltruje radky koncici ~. Jen jsem se snazil upozornit, ze nez to delat takto, tak je vhodnejsi/spravnejsi pouzit parametr "-name" prikazu find. OD TOHO TAM TEN PARAMETR JE!!!

Nebudu psat 3xLOL, jelikoz se mi z tebe spis chce plakat. Precti si me predchozi komentare desetkrat a pomalu a pokud ti to ani pote nedojde, tak se vrat do skolni lavice, jelikoz nerozumis psanemu textu.

Ja se jen snazil uzivateli Rezorcinol poradit, jelikoz projevil snahu se neco naucit. Myslim, ze na tupe injektivy zvedavy neni a do tohoto fora rozhodne nepatri.

Pavelp

  • Host
Re: Skript na smazani docasnych souboru
« Odpověď #24 kdy: 04 Ledna 2008, 20:15:49 »
Pro Marvn: Mrknete se na man nebo info coreutils. Unix je cely zalozeny na zpracovani textovych souboru a ma pro ne obrovskou spoustu vercajku, ktery se da pouzit. Ke stejnym vysledkum se da dojit ruznymi zpusoby, jak ukazuji ponekud neurvale ti dva.
Pro ty dva: Pustit se do sebe kvuli Bashi v roce 2008 je opravdu unmoglich.


 

Provoz zaštiťuje spolek OpenAlt.