kh-ap
Goto Top

Anzahl Dateien ermittlen - shell

Anzahl der Dateien innerhalb eines Ordners ermiteln

Guten Tag,

ich habe das oben genannte Problem, dass ich nicht weis wie ich auf der Shell mir die Anzahl der Dateien innerhalb eines bestimmten Ordners (Problems) ausgeben lassen kann.

Letztendlich will ich ein shell-script schreiben, mit dem man eine bestimmte Datei auswählen kann. Damit man dafür einfach eine Zahl(1-9) eingeben braucht, muss natürlich vor jeder Datei ne Zahl stehn (also jeder Date eine Zahl zugewiesen werden, hoffe es ist klar wiei ch das meine!?!) Jedenfalls muss ich dafür zunächst die Anzahl der Dateien ermitteln. Hatte es bereits mit
"find -type f -print | wc -l " versucht. Allerdings wird mir da eine 7 ausgegeben. Es sind aber nur max 6 datein vorhanden. Leider wird dabei die datein "." und ".." mitgezählt!

Wäre über jeden Kreativen Vorschlaf froh!
Mfg
Felix
Kommentar vom Moderator Biber am Aug 12, 2009 um 18:59:39 Uhr
Wäre über jeden Kreativen Vorschlaf froh!
Mfg
Felix
Jepp, sieht so aus als wäre ein Ausschlafen überfällig... face-wink

Content-Key: 19634

Url: https://administrator.de/contentid/19634

Printed on: April 27, 2024 at 00:04 o'clock

Member: KH-AP
KH-AP Nov 14, 2005 at 14:14:28 (UTC)
Goto Top
so den Befehl zur eigentlichen Abfrage hab ich... ganz einfach:
ls <ordner> | wc -l

allerdings hab ich nun das Problem, dass der User lediglich eine Zahl eingeben braucht und im Prj verzeichniss landet.
Klingt einfach ist aber leider nicht so:
title=`echo $Directory | awk '{print $3}' `

Zur erklärung: in $Directory stehen praktisch die Prj namen dirin, also z.B. Hamburg, Bremen, München o.ä. hintereinander (d.h. so: Hamburg Bremen München)

Die standart Ausgabe ist wegen ner kleinen for-Schleife untereinander:
1 Hamburg
2 Bremen
3 München

so print $3 bewikrt dass München ausgegeben wird. Allerdings muss ich genau die Angabe von $3 Variabel machen!
D.h. ich müsste mir vorher mit -- read -p "Eingabe der Projektnr: " PrjNr --(war zumindest ne Idee von mir) ne Abfrage gestalten.

Wenn ich dann aber bei print $PrjNr eingebe.. dann kommt eben die Angegebene Zahl und nicht wie gewünscht der Dateiname!
Hoffe mal es versteht jemand so halbwegs was ich meine
Bin immer noch für kreative Ideen offen

Mfg
Felix
Member: DerKleineBruder
DerKleineBruder Nov 14, 2005 at 20:17:38 (UTC)
Goto Top
Hi Felix,

so ganz habe ich dein Problem noch nicht verstanden.
Aber ein paar Anmerkungen:
"find . -type f | wc -l" ist korrekt für die Anzahl Dateien
"ls | wc -l" erfasst nicht die Dateien, die mit "." beginnen, außerdem geht es nicht
in die Unterverzeichnisse.
. und .. sind keine Dateien im eigentlichen Sinne, sondern Verweise auf Verzeichnisse, werden daher bei find . -type f nicht berücksichtigt.

Vielleicht kannst du in einer Nachricht oder als Post genauer erläutern, was du meinst.
Hört sich eigentlich lösbar an.

Grüße
das Brüderchen
Member: KH-AP
KH-AP Nov 15, 2005 at 07:02:35 (UTC)
Goto Top
morgen,

mir reicht tatsächlich das ls | wc -l
die Unterverzeichnisse sollen nicht mit gezählt werden, das war schon richtig!
Gut, die Verweise wurden bei der find-Variante mitgezählt, die sollte nicht passieren, da in dem Ordner lediglich Projekordner liegen sollen.
Hab da aber grad ne ganz andere Idee...
troztdem danke für Ihre hilfe

Mfg
Felix
Member: duddits
duddits Nov 23, 2005 at 15:49:43 (UTC)
Goto Top
Hi,

wenn ich dich richig verstehe, so möchtes du ein Script schreiben das wenn du z.B 1 eingibst das du dann in ein zuvor definierten Verzeichnis landest?
Wenn das richtig ist dann gib bescheid oder schildere dein Problem noch mal für mich.
Hätte da schon ein Idee aber möchte jetzt nicht irgendwas posten was das dann doch nicht dem entspreicht was du möchtes.

mfg duddits
Member: KH-AP
KH-AP Nov 24, 2005 at 08:14:31 (UTC)
Goto Top
Morgen,

ja du hast mich schon recht gut verstanden.
Folgendes: Innerhalb des Ordners "Problems" gibt es Projekt ordner, deren Namen logischerweise dem Projektnamen entsprechen. So, nun will ich mit meinem Script eine schleife erzeugen, die mir erstens alle Ordner auflistet und mit Nummern versieht. Das heisst in der Liste steht z.B.:
1) Projektname
so, wenn ich dann auf die Taste 1 drücke soll, das Script in das entsprechende Verzeichniss wechseln (nur innerhalb der shell, das ist so gefordert und für den Benutzer sinnvoller)
Dafür habe ich bisher folgendes erstellt:
(ist leider nicht eingerückt, tut mir leid)

ad=`find * -type d | wc -l` # ad = Anzahl d. Ordner
z=1 # Z=Zähler
listprj=`ls -d */` # listet alle (Projekt)odner

echo "The projects you can choose are shown below:"
echo "--------------------------------------------"
while [ $z -le $ad ] #Schleife läuft durch, bis alle Projekt Ordner augelistet sind
do
for filename in $listprj #um den Namen des Projektordners zu ermitteln
do
echo $z $filename #Ausgabe der Nummer und des Names
let z=$z+1 #hochzählen für while schleife
done
done #ende while

echo "---------------------------------------------"
read -p "Enter the Number of the project or q to go back: " inr #hiermit taste einlesen

resp=`echo $inr`
case $inr in #case prüfung
[0-9])
if [ $inr -ge 0 ] # Eingabe >= 0 ; -ge = grather equal
then
var=`echo $listprj | awk '{print $'$inr'}' ` # $'$INR'- damit eingebenen nr
#auf entspr. Namen verwendet wird
echo -e "$var selected" "\n" #zeigt name d. Ausgewähltens Projektordners
WorkingProject=$var # Name des gewählten Prj in globale Variable um im hauptmenü hinzuwechseln
cd $WorkingProject
echo `pwd`
fi
;;
q)
;;
*) echo "Wrong key"
read -t 20
;;
esac

echo "Pfad bei choose_Prj:"`pwd`
Member: duddits
duddits Nov 27, 2005 at 13:47:13 (UTC)
Goto Top
Hi,

habe dein Script mal ausprobiert und im Prinzip funktioniert es auch. Während das Script läuft wächselt es in das Verzeichniss, welches man zuvor ausgewählt hat nur nach dem das Script zuende ist wechselt es wieder dort hin wo du es gestartet hast.
Die Ursache dieses Problem ist, du musst das Script in der selben shell laufen lassen und nicht eine Subshell für das scipt öffnen.

Also keine #! /bin/bash im Script und kein exit im script und dann das Script
über Punkt SPACE SCRIPT (. Script) starten, somit wird für das Script keine Subshell geöffnet.
Dies funktioniert auch wenn du das Script in eines der PATH Verzeichnisse ist , wie z.B. /usr/bin/

Du kannst beim find Befehl mit dem Schalter -maxdepth 0 ( ad=`find * -type d -maxdepth 0 | wc -l` ) dafür sorgen ,das keine Unterverzeichnisse gewählt werden.

mfg duddits
Member: KH-AP
KH-AP Dec 02, 2005 at 15:26:50 (UTC)
Goto Top
hallo,

ne das ist ja auch so beabsichtigt, dass das Verzeichniss nur innerhalb der Shell gewechselt werden soll... einfach um DAU fragen zu vermeiden!

Ja mit dem -maxdepth hatte ich schonmal bissel rumprobiert. Aber wie gesagt, die oben genannte Lösung ist soweit auch ok, troztdem vielen dank.

FElix