Re: Zwei Scriptproblem(chen?)
* Andreas Pakulat schrieb am 01.Sep.2003:
> On 01.Sep 2003 - 01:34:40, J. Volkmann wrote:
> > ich habe folgende zwei Probleme, vor denen ich gerade ziemlich ratlos
> > stehe. Der Spaß sollte wenn es geht via Shellscript gelöst werden, da
> > ich das gerne in ein existierendes einbinden würde.
> >
> > a) Ich habe hier ~5500 Dateien verteilt auf viele Unterordner, bei
> > welchen er mir alle ausspucken soll die die exakt gleiche Größe haben.
>
> Also wenn ich das richtig verstehe willst du jede Datei mit jeder
> anderen vergleichen? Das wird ziemlich aufwendig, mal davon abgesehen,
> das da ein Shellscript vielleicht nicht unbedingt das richtige ist.
>
> Das ist aber nicht allzu fix, schätze ich. Obwohl find ja da auch
> ziemlich gut cacht, denke ich. Man könnte das noch optimieren, indem
> man vor dem 2. find überprüft ob der aktuelle Dateiname schon einmal
> ausgegeben wurde. Das könnte dann so aussehen:
>
> list=""
> find -type f | while read f ; do
> if [[ ! $(echo $list | grep $f) ]] ; then
> echo "files with same size as $f:"
> list="$(echo -e "$list\n$f")"
> l1=$(find -type f -size $(ls -l $f | awk '{print $5}')c -print)
> for i in l1 ; do
> if [[ !$(echo $list | grep $i ) ]] ; then
> echo -e "\t$i"
> list=$(echo -e "$i\n$list")
> fi
> done
> fi
> done
Zu kompliziert, jedenfalls wenn man das GNU find verwendet. Die
Klimmzüge mit ls und awk sind hier nicht notwendig. Es reicht ein
einfaches -printf "%b " und es wird die Dateigröße in Blöcken
ausgegeben. Mit %k in kilobytes und mit %s in Bytes.
Allerdings bleibt das Problem, daß man zwei find ineinander
geschachtetlt hat. Und das braucht sehr sehr lange, einfach weil da
sehr viel verglichen werden muß. In etwa Fileanzahl zum Quadrat.
> > b) In dem gleichen Dir soll er mir alle ausspucken welche den gleichen
> > Namen haben. Aber auch unabhängig von der Groß-/Kleinschreibung...
>
> analog oben aber beim inneren find dann natürlich:
> find -type f -iname $f
Sowohl -printf als auch -iname sind übrigens GNU-find typisch und
funktionieren auf andere find nicht.
Bernd
Reply to: