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
-
Mam otazku ako vyberem z tohto zoznamu iba tie riadky ktore maju na konci ~
/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~
-
grep -E '*~$'
-
Dik. Mam este jednu otazku a to ako pridam pre kazdy riadok v subore prikaz rm -rf (riadkov je x pocet), naprkilad zo zonamu:
/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:
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~
-
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`
-
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.
sudo find /home/hax/ -type f -iname *~* -o -iname .*~* -print
-
find /home/hax -iname \*~
nevedel jsem to, ale nasel jsem to v man find
-
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 ;) )
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?
-
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.
-
ok.... milion - 2 ... cekam na dalsi :))
-
pokud jde pouze o smazání souborů s ~ na konci, tak by mohlo stačit "rm *~" ne?
-
jaj jsem idiot. nenapadlo me, ze to umi regexp nebo wildcards...
-
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 :).
-
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...
-
Ještě mě napadlo tohle, kdyby někdo veděl jak vypsat ls s celou cestou
rm `ls -R | grep ~$`
takhle by to pak fungovalo, jenže jinak to udělá tohle → ukázka
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
-
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.
-
Jakýkoliv znak je jen tečka ne ? :)
-
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, ...
-
Aha, tak to bude ono. Pac v bashi se to tak pouziva, aspon teda ja to tak pouzivam.
-
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:
#!/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
-
ty tam toho ale delas vic? :-)
Podivej, jestli chces najit soubory koncici na ~, tak to udela
find ~ -type f -name '*~' 2> /dev/null
Jestli nechces, aby mezi nimi bylo .bashrc~, tak je to
find ~ -type f -name '*~' ! -name '.bashrc~' 2> /dev/null
a pokud je chces smazat, tak je to
find ~ -type f -name '*~' ! -name '.bashrc~' -exec rm {} \; 2> /dev/null
to 2> /dev/null tam pripadne nedavej, at vidis chybove hlasky a muzes vychytat pripadne bugy
-
find ~ -type f -name '*~' ! -name '.bashrc~' -exec rm {} \; 2> /dev/null
To je vsetko? Nic viac netreba?
-
to zkus ;)
ale muzu tam pridat i nekolik radku zbytecneho balastu a treba i graficky progress bar :D
-
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. ;)
-
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).