Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Obecná podpora => Téma založeno: Rezorcinol 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.
-
podívej se na man rm, soustřeď se na parametry r a f. a hlavně to nepouštěj pod rootem.
-
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?
-
rm akceptuje parametr/nazev pro smazani, afaik podporuje wildcards. vygoogli si /etc/rc.local
-
To mazanie ide napriklad takto: find /home/cesta/ -name *~ | xargs rm -f
Staci prikaz zadat spustat po startu System - preferencs - sessions
-
a neslo by to jen pomoci:
rm -fR ~/*~
?
-
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í :).
-
A co je tedy lepsi?
rm -fR ~/*~
nebo
rm -fR *~
tedy spise je v tom nejaky rozdil?
-
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 ).
-
#!/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;
-
Jo profík se pozná :), tleskám :).
-
+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
-
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?
-
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
-
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
-
hh...tolik prace se scriptem a pritom je to tak snadne (http://www.youtube.com/v/D4fzInlyYQo&rel=1&border=0) :D
-
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 ..
-
proc psat dlouhe skripty? soubory v domovskem adresari (a podadresarich) koncici na ~ smaze proste
$ find ~ -name '*~' -exec rm {} \;
find je mocny.
Slozku ~/lexicon smaze
$ rm -r ~/lexicon
Takze ten komplikovany skript by mohl vypadat
#!/bin/bash
find ~ -name '*~' -exec rm {} \;
rm -r ~/lexicon
-
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
-
Jasne, vsak kazdemu vyhovuje neco jineho. Ale kdyz uz mluvime o studijni hodnote, tak si zapamatuj hledani souboru konkretniho nazvu pomoci parametru "-name"
$ find KDE_HLEDAT -name 'MASKA_NAZVU'
nez to "zvrhle" ze skriptu (nic proti :-) )
$ 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.
-
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
-
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?
-
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 ::
..tak si zapamatuj..
nekam jinam, pac slusnej clovek hleda via:
find /home/u/tupeho/karlika | egrep '~$' // 3x 'LOL' na tvoji nevymachanou hubu
zdravi ntz
-
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!!!
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.
-
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.
-
Já bych to tady pro jistotu uzavřel, ta diskuse přestává vypadat plodně.
-
+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
+na popud nevychovaneho karlika doplnena funkce SKEL, ktera substituuje $HOME za $MY_TEMP a diky tomu nam zustanou zachovany stejne pojmenovane soubory
enjoy by ntz
-
ue? proc mi forum nesezere:
cat nejaky_skript | sed -re 's/\#/\[i\]#/;/\[i\]/s/$/\[\\i\]/' // muzete vyzkouset, v bashovych skriptech hodi pouze komentare mezi 'komentar[\i]'
-
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.
Ja ve svem komentari nikoho jako prvni napadat nezacal. Snazil jsem se prispivat vecne, coz musi byt jasne kazdemu, kdo si tu diskuzi precte. Opravdu neni mym cilem zde vyvolavat konflikty. Verim, ze ten, kdo si procte nekolik mych poslednich prispevku uzna, ze nemam potrebu lidi (bezduvodne) napadat. Snad jen obcas ty, kteri nevenuji ani minutu snaze prohledat forum a najit odpoved na jejich dotaz. Ale kazdy ma nekdy den blbec.