/usr/bin/find; bezpecnost rm -rf

Michal Ludvig michal-linux na logix.cz
Středa Říjen 16 15:16:47 CEST 2002


Jirka Kosina wrote:
>>Mam GNU find version 4.1.6 a potrebuju tu a tam promazat jisty TMP
>>adresar, do nehoz muze kdokoliv cokoliv zapsat. Nabizelo by sejednoduche
>>reseni jako: find /adresar/temp -atime +2 -exec rm -rf -- {} \;
> 
> (jen tak BTW, misto -exec bych doporucil xargs, kdyz uz find).

No to byste tomu dal... Rozdil je ten, ze -exec preda programu kazdy 
soubor jako jeden argument, zatimco xargs to rozdeli po slovech (na 
mezerach). Mozna by sel xargs presvedcit, aby bral co radka to argument, 
ale implicitne to nedela. Dusledky jsou tyto:

$ cat args.sh
while (test "x$1" != "x") do
         echo "Arg: $1"
         shift
done

1) vytvorim soubor s mezerama:
$ touch "a b c"
$ find
.
./a b c

2) spustim find s -exec:
$ find -exec /tmp/args.sh {} \;
Arg: .
Arg: ./a b c
=> rm by bylo spusteno "bezpecne" ...

3) spustim find s xargs:
$ find | xargs /tmp/args.sh
Arg: .
Arg: ./a
Arg: b
Arg: c
=> nestacime se divit, co vsechno jsme si na serveru promazali ;-)

Michal Ludvig



Další informace o konferenci Linux