Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: garmada 13 Prosince 2008, 13:27:25

Název: Pomoc so skriptom
Přispěvatel: garmada 13 Prosince 2008, 13:27:25
Mam otazku ako vyberem z tohto zoznamu iba tie riadky ktore maju na konci ~
Kód: [Vybrat]
/home/hax/.bluefish/highlighting~
/home/hax/.bashrc~
/home/hax/Documents/ubuntu-wiki/attachments/Optimalizace(20)ext3/defrag_0.1~bzr20060502_i386.deb
/home/hax/Documents/grc-prz-vjn~
/home/hax/Documents/Ubuntu LTS Server Administration  Second Edition~tqw~_darksiderg/Ubuntu LTS Server Administration  Second Edition~tqw~_darksiderg.pdf
/home/hax/.gnupg/pubring.gpg~
/home/hax/Projects/python.sh~
/home/hax/Projects/Drupal/pass.txt~
/home/hax/Projects/shell.sh~
/home/hax/Desktop/clean_config~
/home/hax/Desktop/clean~
Název: Re: Pomoc so skriptom
Přispěvatel: truhlik 13 Prosince 2008, 13:42:57
grep -E '*~$'
Název: Re: Pomoc so skriptom
Přispěvatel: garmada 13 Prosince 2008, 14:06:18
Dik. Mam este jednu otazku a to ako pridam pre kazdy riadok v subore prikaz rm -rf (riadkov je x pocet), naprkilad zo zonamu:
Kód: [Vybrat]
/home/hax/.bluefish/highlighting~
/home/hax/.bashrc~
/home/hax/Documents/grc-prz-vjn~
/home/hax/.gnupg/pubring.gpg~
/home/hax/Projects/python.sh~
/home/hax/Projects/Drupal/pass.txt~
/home/hax/Projects/shell.sh~
/home/hax/Desktop/python_file.py~
/home/hax/Desktop/clean_config~
/home/hax/Desktop/clean~
Potrebujem spravit toto:
Kód: [Vybrat]
rm -rf /home/hax/.bluefish/highlighting~
rm -rf /home/hax/.bashrc~
rm -rf /home/hax/Documents/grc-prz-vjn~
rm -rf /home/hax/.gnupg/pubring.gpg~
rm -rf /home/hax/Projects/python.sh~
rm -rf /home/hax/Projects/Drupal/pass.txt~
rm -rf /home/hax/Projects/shell.sh~
rm -rf /home/hax/Desktop/python_file.py~
rm -rf /home/hax/Desktop/clean_config~
rm -rf /home/hax/Desktop/clean~
Název: Re: Pomoc so skriptom
Přispěvatel: nettezzaumana 13 Prosince 2008, 14:36:55
grep -E '*~$'

ad.1).. spatne napsany RE .. '*' v RE znamena "zadny nebo libovolny pocet opakovani predchoziho znaku .."

spravne reseni je '~$' .. nema se smysl hadat ze '*~$' funguje, protoze na podobnych chybach jsou zalozeny vsechny security bugy a exploity ..

ad.2) blockx() | while read line; do blocky(); done // takze napriklad `cat foo | while read line; do echo "$line"; done`

ad.3) fox x in $(blockx()); do blocky(); done // takze napriklad `for x in $(cat foo); do echo "$line"; done`
Název: Re: Pomoc so skriptom
Přispěvatel: garmada 13 Prosince 2008, 16:18:24
Poradte ako mam najst vsetky subory ktore koncia na ~, skusal som tento prikaz ale nic my nenapise a pritom take subory v domovskom pricinku mam.
Kód: [Vybrat]
sudo find /home/hax/  -type f -iname *~* -o -iname .*~* -print
Název: Re: Pomoc so skriptom
Přispěvatel: ufaak 13 Prosince 2008, 18:10:08
Kód: [Vybrat]
find /home/hax -iname \*~
nevedel jsem to, ale nasel jsem to v
Kód: [Vybrat]
man find
Název: Re: Pomoc so skriptom
Přispěvatel: starenka 13 Prosince 2008, 18:23:57
Zrejme se snazis udelat skript "smaz vsechny soubory v adresari  s ~ na konci"?

jde to zrejme asi milion zpusoby, me napadlo treba tohle (uz vidim jak me ntz zpwnuje ;) )

Kód: [Vybrat]
ls | egrep '~$' | while read line; do rm -f "${line}"; done
ls - vypise obsah adresare
egrep - vyfiltruje jen radky odpovidajici regularu (viz ntz)
while ... - cyklus projde vsechno co zbyde a pusti prikaze mezi do a done

btw: @ntz: muzes mi rict, co je spatnyho na regularu .*~$  cokoliv 0-n -krat ~ konec - nechapu, co je na tom spatne?
Název: Re: Pomoc so skriptom
Přispěvatel: ufaak 13 Prosince 2008, 18:30:15
Citace: man find
       find /tmp -name core -type f -print | xargs /bin/rm -f

       Find files named core in or below the directory /tmp and  delete  them.
       Note  that  this  will work incorrectly if there are any filenames con‐
       taining newlines, single or double quotes, or spaces.

       find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f

       Find files named core in or below the directory /tmp and  delete  them,
       processing  filenames  in  such a way that file or directory names con‐
       taining single or double quotes, spaces or newlines are correctly  han‐
       dled.   The  -name  test  comes before the -type test in order to avoid
       having to call stat(2) on every file.

Název: Re: Pomoc so skriptom
Přispěvatel: starenka 13 Prosince 2008, 18:35:38
ok.... milion - 2 ... cekam na dalsi :))
Název: Re: Pomoc so skriptom
Přispěvatel: Tomáš Jančík 13 Prosince 2008, 18:58:59
pokud jde pouze o smazání souborů s ~ na konci, tak by mohlo stačit "rm *~" ne?
Název: Re: Pomoc so skriptom
Přispěvatel: starenka 13 Prosince 2008, 19:03:12
jaj jsem idiot. nenapadlo me, ze to umi regexp nebo wildcards...
Název: Re: Pomoc so skriptom
Přispěvatel: premet 13 Prosince 2008, 19:24:21
pokud jde pouze o smazání souborů s ~ na konci, tak by mohlo stačit "rm *~" ne?
Taky si myslím, že by to mělo stačít, zkoušel sem a funguje  :).
Název: Re: Pomoc so skriptom
Přispěvatel: ufaak 13 Prosince 2008, 19:26:10
pokud jde pouze o smazání souborů s ~ na konci, tak by mohlo stačit "rm *~" ne?
Taky si myslím, že by to mělo stačít, zkoušel sem a funguje  :).

ne pokud te zajimaji i podadresare...
Název: Re: Pomoc so skriptom
Přispěvatel: premet 13 Prosince 2008, 20:01:59
Ještě mě napadlo tohle, kdyby někdo veděl jak vypsat ls s celou cestou
 
Kód: [Vybrat]
rm `ls -R | grep ~$` takhle by to pak fungovalo, jenže jinak to udělá tohle → ukázka
Kód: [Vybrat]
rm: nelze odstranit „prvocisla.c~“: není souborem ani adresářem
rm: nelze odstranit „vstup.c~“: není souborem ani adresářem
rm: nelze odstranit „vstup_vystup.c~“: není souborem ani adresářem
rm: nelze odstranit „vstup_vystup1.c~“: není souborem ani adresářem
rm: nelze odstranit „bubble_sort.c~“: není souborem ani adresářem
rm: nelze odstranit „insert_sort.c~“: není souborem ani adresářem
rm: nelze odstranit „select_sort.c~“: není souborem ani adresářem
Název: Re: Pomoc so skriptom
Přispěvatel: truhlik 13 Prosince 2008, 22:11:28
ad.1).. spatne napsany RE .. '*' v RE znamena "zadny nebo libovolny pocet opakovani predchoziho znaku .."

spravne reseni je '~$' .. nema se smysl hadat ze '*~$' funguje, protoze na podobnych chybach jsou zalozeny vsechny security bugy a exploity ..
Ok, budu si to pamatovat. Mel jsem za to, ze * znamena jakykoliv, nebo zadny znak.
Název: Re: Pomoc so skriptom
Přispěvatel: premet 14 Prosince 2008, 10:35:00
Jakýkoliv znak je jen tečka ne ?   :)
Název: Re: Pomoc so skriptom
Přispěvatel: kkaarreell 14 Prosince 2008, 12:06:00
ad.1).. spatne napsany RE .. '*' v RE znamena "zadny nebo libovolny pocet opakovani predchoziho znaku .."

spravne reseni je '~$' .. nema se smysl hadat ze '*~$' funguje, protoze na podobnych chybach jsou zalozeny vsechny security bugy a exploity ..
Ok, budu si to pamatovat. Mel jsem za to, ze * znamena jakykoliv, nebo zadny znak.
on je totiz rozdil v tzv. wildcards pouzivanych shellem (jako bash) pri expanzi parametru a regexpy, jez se pouzivaji v grepu, sedu, ...
Název: Re: Pomoc so skriptom
Přispěvatel: truhlik 14 Prosince 2008, 14:39:53
Aha, tak to bude ono. Pac v bashi se to tak pouziva, aspon teda ja to tak pouzivam.
Název: Re: Pomoc so skriptom
Přispěvatel: garmada 14 Prosince 2008, 14:54:31
Viete niekto napisat taky jednoduchy script ktory by nasiel vsetky subory ktore koncia na ~ a nachadzaju sa v domovskom adresari (okrem .bashrc~).
Ja som napisal toto ale ide to niak divne:
Kód: [Vybrat]
#!/bin/bash
cd ~
cp -rf .bashrc~ /tmp/
sudo find ~ -type f -name '~$' -print >> /tmp/clean
cat /tmp/clean | while read line; do echo sudo rm -rf $line >> /tmp/clean ; done
sed -i 1i"#!/bin/bash" /tmp/clean
echo 'exit 0' >> /tmp/clean
head
sudo echo 'exit 0' >> /tmp/clean
mv /tmp/clean /tmp/clean_run.sh
sudo chmod 777 /tmp/clean_run.sh
sudo /tmp/clean_run.sh
cp -rf /tmp/.bashrc~ ~
rm -rf /tmp/.bashrc~
rm -rf /tmp/clean_run.sh
exit 0
Název: Re: Pomoc so skriptom
Přispěvatel: kkaarreell 14 Prosince 2008, 15:06:51
ty tam toho ale delas vic? :-)

Podivej, jestli chces najit soubory koncici na ~, tak to udela
Kód: [Vybrat]
find ~ -type f -name '*~'  2> /dev/nullJestli nechces, aby mezi nimi bylo .bashrc~, tak je to
Kód: [Vybrat]
find ~ -type f -name '*~' ! -name '.bashrc~' 2> /dev/nulla pokud je chces smazat, tak je to
Kód: [Vybrat]
find ~ -type f -name '*~' ! -name '.bashrc~' -exec rm {} \; 2> /dev/nullto 2> /dev/null tam pripadne nedavej, at vidis chybove hlasky a muzes vychytat pripadne bugy
Název: Re: Pomoc so skriptom
Přispěvatel: garmada 14 Prosince 2008, 15:09:53
Kód: [Vybrat]
find ~ -type f -name '*~' ! -name '.bashrc~' -exec rm {} \; 2> /dev/null

To je vsetko? Nic viac netreba?
Název: Re: Pomoc so skriptom
Přispěvatel: kkaarreell 14 Prosince 2008, 15:10:55
to zkus ;)
ale muzu tam pridat i nekolik radku zbytecneho balastu a treba i graficky progress bar :D
Název: Re: Pomoc so skriptom
Přispěvatel: garmada 14 Prosince 2008, 15:22:26
to zkus ;)
ale muzu tam pridat i nekolik radku zbytecneho balastu a treba i graficky progress bar :D

Napis, to by sa hodilo. Inak diky. ;)
Název: Re: Pomoc so skriptom
Přispěvatel: Martin - ViPEr*CZ* 14 Prosince 2008, 15:36:10
A nebo na to při nejhorším použiju C/C++ co :D

Jsem schválně hledal jak projít disk (protože to znám jen z Woken) a našel jsem http://en.wikipedia.org/wiki/Dirent.h#Member_functions
Ale docela ta struktura nabízí málo info nebo se pletu? Neví někdo něco lepšího? Chybí mi třeba, že tam není zda je to adresář nebo ne? Nebo to poznám pokud je d_ino prázdný? A velikost souboru doufám, že je v proměnný d_reclen.

FindFirstFile z windows a ekvivalenty umějí zjistit zda našli adresář nebo soubor, velikost souboru, datum a čas vytvoření...(píšu z hlavy možná toho je více).