Top-Themen

Aktuelle Themen (A bis Z)

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

gelöst Datei zeilenweise in einem Bash Script verarbeiten

Mitglied: risc2000

risc2000 (Level 1) - Jetzt verbinden

12.04.2008, aktualisiert 14.04.2008, 30481 Aufrufe, 4 Kommentare

Hallo, ich möchte in einem Verzeichnis rekursiv alle Unterverzeichnisse in einer Liste speichern. Anschließend möchte ich diese Liste "abarbeiten", in dem ich in jedes Unterverzeichnis wechsel und dort entsprechende Befehle ausführe. Als Ansatz habe ich folgendes Bash Script, was mir aber bei der Zeile: cd $_DIR fogenden Fehler bring: "Zugriff auf ... nicht möglich: Datei oder Verzeichnis nicht gefunden"

Ich finde den Fehler nicht, die Verzeichnisse existieren. Manuell geht es auch mit cd /gehe/in/das/entsprechende/verzeichnis


Vielen Dank, schonmal.


[code]
#!/bin/bash

#! Verzeichnisliste erzeugen
find -type d | cut -c 2-512 > $DIRLIST

#! Verzeichnisliste zeilenweise einlesen
for _DIR in `$DIRLIST` ; do

#! In das Aktuelle Verzeichniss gehen
cd $_DIR

#! ... hier werden weiter Befehle im Aktuellen Verzeichnis ausgeführt
cd ~/zuruck/zum/script

done
[/code]
Mitglied: Biber
14.04.2008 um 08:20 Uhr
Moin risc2000,

ich weiß ja nicht genau, welches *nix-Derivat Du missbrauchst und kann auch nich ganz eindeutig den Plan erkennen.
Und ich denke, der bash geht es genauso.

IMHO ist das Problem, dass die Shell nicht so genau weiß, ob Du mit $DIRLIST eine Variable oder eine Datei meinst.
Bei mir (Solaris-Büchse) sagt sie das auch bei Deinem Schnipsel:
01.
./forsubdirs: line 2: $DIRLIST: ambiguous redirect
02.
./forsubdirs: line 9: $DIRLIST: ambiguous redirect
Ich würde es so umbauen ( 2 Beispiele mit einer Hilfdatei, eines ohne Datei):
01.
#!/bin/bash
02.
ls -d1 * > DIRLIST
03.
#  Bsp [1]: mit while read... aus Inputdatei DIRLIST
04.
while read _DIR
05.
do
06.
   #  aktuelles Verzeichnis ausgeben
07.
   echo 'cd ' $_DIR
08.
done < DIRLIST
09.
# Bsp 2: oder mit for in Ausgabe von cat vonner DIRLIST-Datei
10.
for _DIR in `cat DIRLIST` ; do
11.
 
12.
#! In das Aktuelle Verzeichniss gehen
13.
echo 'cd '$_DIR
14.
 
15.
#! ... hier werden weiter Befehle im Aktuellen Verzeichnis ausgeführt
16.
# cd ~/zuruck/zum/script
17.
 
18.
done
19.
 
20.
# Bsp 3 ...ohne Datei mit der Ausgabe von ls.
21.
for _DIR in `ls -d1 *` ; do
22.
 
23.
#! In das Aktuelle Verzeichniss gehen
24.
echo 'cd '$_DIR
25.
 
26.
#! ... hier werden weiter Befehle im Aktuellen Verzeichnis ausgeführt
27.
# cd ~/zuruck/zum/script
28.
 
29.
done
Anmerkung: Variablennamen wie $_DIR finde ich absolut verwegen.
Und Dateinamen wie $DIRLIST (falls es einer sein sollte) auch.

Grüße
Biber
Bitte warten ..
Mitglied: risc2000
14.04.2008 um 19:35 Uhr
Danke, für die Hinweise aber leider funktioniert das so auch nicht.

Der "ls -d1 *" Befehl listet bei mir die Verzeichnisse nicht Rekursiv. Ein "-R" als Option bringt auch nichts. Deshalb habe ich auch obigen find Befehl benutzt. Zum besseren Verständnis erkläre ich nochmal genau, was ich eigentlich vorhabe. Ich habe ein Verzeichnis, mit sehr vielen Unterverzeichnissen, welche wiederum Unterverzeichnisse enthalten können, irgendwo in diesen Verzeichnissen befinden sich Bilder, also *.jpg Dateien. Ich möchte das gesamte Verzeichnis nun durchsuchen, und wenn in einem der Untererzeichnisse *.jpg Dateien enthalten sind, soll in diesem Verzeichnis eine Datei angelegt werden.

Mit dem folgendem Befehl erstelle ich erstmal eine Liste aller Verzeichnisse, nebst Unterverzeichnisse. (cut dient nur dazu mir am Anfang jeder Ziele, den "./" abzuschneiden.

find -type d | cut -c 3-512 > /tmp/verzeichnisliste.txt

Jetzt möchte ich in einer Schleife diese Liste einlesen, in jedes Verzeichnis "gehen", un dort nach den *.jpg Dateien suchen, wenn diese gefunden werden, soll eine Datei angelegt werden.

while
read line; do

echo $line;

done < verzeichnisliste.txt

Das funktioniert soweit auch, das echo gibt mir zumindest alle Verzeichnisse aus, wenn ich aber im Script "cd $line" anwende funktioniert es nicht. Ich erhalte obige Fehlermeldung.
Bitte warten ..
Mitglied: Biber
14.04.2008 um 19:58 Uhr
Moin risc2000,

dann lass doch das Abschneiden von "./" einfach weg.
Bei mir funktioniert unter der bash jedenfalls nach einem:
_DIR=./subdir

sowohl als auch
cd "$_DIR"
cd $_DIR
und sogar
cd "./$_DIR"

Legt die Vermutung nahe, dass wir unterschiedlich bash's haben.

Grüße
Biber
Bitte warten ..
Mitglied: risc2000
14.04.2008 um 20:14 Uhr
Danke, ohne den cut geht es jetzt auch bei mir. Hier jetzt zur Vollständigkeit das funktionierende Script, damit kann ich jetzt weiter arbeiten.

#!/bin/bash
find -type d > dirlist.lst

while
read line; do
cd "$line"
touch index.html
cd /zurueck/zum/script/

done < dirlist.lst
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Bash Script soll neue Datei erzeugen
Frage von SpeakerSTBatch & Shell2 Kommentare

Hallo zusammen, ich benötige mal euren Rat. Ich möchte in einem Script Parameter eingeben die darauf hin einen Text ...

Batch & Shell
Automatisiertes bash Script
gelöst Frage von SpeakerSTBatch & Shell5 Kommentare

Hallo, ich hoffe mir kann hier jemand helfen. Ich versuchen uns unsere Linux Installation zu Autmoatisieren. Dabei sollen Teil ...

Linux Tools
Bash - Script Neustart
Frage von rsadmchefLinux Tools2 Kommentare

Hallo Team, ich suche nach einer Lösung mit der ein Bash Script -abhängig von einem Ereignis- sich bendet + ...

Linux
Umlaute zählen - Bash-Script
gelöst Frage von plutowitschLinux5 Kommentare

Hallo liebe Administratoren, ich würde gerne mit Hilfe eines Codeschnipsels die Umlaute eines Strings zählen. Beispiel: Jemand eine Idee, ...

Neue Wissensbeiträge
iOS
WatchChat für Whatsapp
Tipp von Criemo vor 1 TagiOS3 Kommentare

Ziemlich coole App für WhatsApp User in Verbindung mit der Apple Watch. Gibts für iOS sowohl als auch für ...

iOS
IOS hat nen Cursor !!!
Tipp von Criemo vor 1 TagiOS5 Kommentare

Nette Funktion im iOS. iPhone-Mauszeiger aktivieren „Nichts ist nerviger, als bei einem Tippfehler zu versuchen, den iOS-Cursor an die ...

Off Topic
Avengers 4: Endgame - Erster Trailer
Information von Frank vor 3 TagenOff Topic2 Kommentare

Ich weiß es ist Off Topic, aber ich freue mich auf diesen Film und vielleicht geht es anderen hier ...

Webbrowser
Microsoft bestätigt Edge mit Chromium-Kern
Information von Frank vor 4 TagenWebbrowser5 Kommentare

Microsoft hat nun in seinem Blog bestätigt, dass die nächste Edge Version kein EdgeHTML mehr für die Darstellung benutzen ...

Heiß diskutierte Inhalte
Windows Netzwerk
Kerio. Kann keine Mails empfangen aber senden. Wer ist schuld. Kerio oder Windows domäne?
gelöst Frage von frosch2Windows Netzwerk22 Kommentare

Hallo, es existiert ein Problem bei uns mit dem mailen. Alle bestehenden Nutzer können mailen. Raus wie rein. Neuen ...

Hosting & Housing
VMware VM mit über 1TB RAM für S4HANA
Frage von Leo-leHosting & Housing20 Kommentare

Hallo zusammen, wer hat Erfahrng und kann mir einen Tipp zum sizing von S4HANA Systemen geben? Wir möchten, zunächst ...

Exchange Server
Exchange Server 2010: Keine Eingehenden E-MAils
gelöst Frage von gabeBUExchange Server17 Kommentare

Hallo Zusammen Ich habe das kurzen auf dem Exchange 2010 Server das Problem, dass ich keine externen E-Mails mehr ...

Virtualisierung
Gebrauchte Server Hardware als Virtualisierungs-"Spielwiese"?
Frage von NixVerstehenVirtualisierung15 Kommentare

Einen wunderschönen guten Morgen zusammen, ich möchte mich gerne etwas tiefer mit dem Thema Virtualisierung beschäftigen und dazu ein ...