[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Zwei Scriptproblem(chen?)



On 01.Sep 2003 - 01:34:40, J. Volkmann wrote:
> Hallo Liste,
> 
> 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

Wobei natürlich das innere find, nicht zu viele Dateien liefern darf,
da sonst glaub ich die Bash meckert. 

(Sorry für die überlangen Zeilen)

> 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

> Irgendwie... bin ich da leicht ratlos? Mit find kann ich zwar nach
> Größen suchen, mit diff kann ich Dateien vergleichen, aber irgendwie
> wäre das doch sehr aufwendig?

Was willst du denn mit diff, bei der Angelegenheit? Mir fällt grad
noch ein, dass man das ls -l | awk  durch einen passenden -printf
Ausdruck bei find ersetzen kann. Und auch das echo -e "$(f|i)\n$list"
könnte man anderweitig, z.B. durch einfache Zuweisung mit
list=$(f|i):$list ersetzen, sofern die Dateien keinen : enthalten.

Andreas

-- 
Schlanke sind bloß zu doof zum Essen!



Reply to: