Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
Kommentar vom Moderator Biber am 12.08.2009 um 20:59:39 Uhr
Wäre über jeden Kreativen Vorschlaf froh!
Mfg
Felix
Jepp, sieht so aus als wäre ein Ausschlafen überfällig...
GELÖST

Anzahl Dateien ermittlen - shell

Frage Linux Linux Desktop

Mitglied: KH-AP

KH-AP (Level 1) - Jetzt verbinden

14.11.2005, aktualisiert 12.08.2009, 18169 Aufrufe, 7 Kommentare

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!
Mit freundlichen Grüßen
Felix
Mitglied: KH-AP
14.11.2005 um 15:14 Uhr
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

Mit freundlichen Grüßen
Felix
Bitte warten ..
Mitglied: DerKleineBruder
14.11.2005 um 21:17 Uhr
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
Bitte warten ..
Mitglied: KH-AP
15.11.2005 um 08:02 Uhr
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

Mit freundlichen Grüßen
Felix
Bitte warten ..
Mitglied: duddits
23.11.2005 um 16:49 Uhr
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.

Mit freundlichen Grüßen duddits
Bitte warten ..
Mitglied: KH-AP
24.11.2005 um 09:14 Uhr
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`
Bitte warten ..
Mitglied: duddits
27.11.2005 um 14:47 Uhr
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.

Mit freundlichen Grüßen duddits
Bitte warten ..
Mitglied: KH-AP
02.12.2005 um 16:26 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...