[geloest] Find - Ergebnisse in Array speichern ohne Pfad
- ralfoertner
- Beiträge: 10
- Registriert: 08.10.2015 14:10:57
[geloest] Find - Ergebnisse in Array speichern ohne Pfad
Hallo Script Profis!
Ich bin leider keiner. Deshalb bitte ich euch um Hilfe!
Mein Problem betrifft den Output des Findbefehls.
Ich lese mittels findbefehl aus einem Verzeichnis Unterverzeichnisnamen in ein Array ein. Das funktioniert soweit ganz gut.
Der Findbefehl gibt den Pfad zusätzlich zum Verzeihnisnamen mit aus.
Der Pfad stört mich bei der Weiterverarbeitung, ich entferne ihn mit -printf '%f, auch ok.
Die Verzeichnisnamen entsprechen somit meinem Wunsch, kein Pfad und kein ./ mehr.
Allerdings sind die Ergebnisse jetzt doppelt vorhanden!!
Einmal korrekt und einmal mit ./ davor.
Hier folgt der Code:
while IFS= read -r -d $'\0'; do
folder+=("$REPLY")
done < <(find . -name "$kunde" -type d -printf '%f\n')
Das Ergebnis ist bsbw.
ds_3000 und ./ds_3000
die Namen sind doppelt vorhanden !!
Wie stelle ich das ab?
Googeln hat nicht geholfen.
Habt ihr eine Idee??
Danke im Voraus!!
MfG RO
Ich bin leider keiner. Deshalb bitte ich euch um Hilfe!
Mein Problem betrifft den Output des Findbefehls.
Ich lese mittels findbefehl aus einem Verzeichnis Unterverzeichnisnamen in ein Array ein. Das funktioniert soweit ganz gut.
Der Findbefehl gibt den Pfad zusätzlich zum Verzeihnisnamen mit aus.
Der Pfad stört mich bei der Weiterverarbeitung, ich entferne ihn mit -printf '%f, auch ok.
Die Verzeichnisnamen entsprechen somit meinem Wunsch, kein Pfad und kein ./ mehr.
Allerdings sind die Ergebnisse jetzt doppelt vorhanden!!
Einmal korrekt und einmal mit ./ davor.
Hier folgt der Code:
while IFS= read -r -d $'\0'; do
folder+=("$REPLY")
done < <(find . -name "$kunde" -type d -printf '%f\n')
Das Ergebnis ist bsbw.
ds_3000 und ./ds_3000
die Namen sind doppelt vorhanden !!
Wie stelle ich das ab?
Googeln hat nicht geholfen.
Habt ihr eine Idee??
Danke im Voraus!!
MfG RO
Re: Find - Ergebnisse in Array speichern ohne Pfad
Sieht so aus wie wenn du Null-terminiert lesen wuerdest, dein Input aber Newline-terminiert ist. Aber ich bin kein Bash-Profi.
Nach einem Blick in die Manpage der Bash frage ich mich, ob nicht das Builtin `readarray' das ist was du eigentlich verwenden solltest.
Nach einem Blick in die Manpage der Bash frage ich mich, ob nicht das Builtin `readarray' das ist was du eigentlich verwenden solltest.
Use ed once in a while!
- MegaV0lt
- Beiträge: 173
- Registriert: 21.11.2011 11:16:07
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Re: Find - Ergebnisse in Array speichern ohne Pfad
Aus einem meiner Skripte:
Das %P\0 müsste helfen
Code: Alles auswählen
while IFS= read -r -d '' ; do
...
done < <(find "$R_TARGET" -maxdepth 1 -type f -printf '%P\0') # %P = Datei ohne führendes "./" und ohne Pfad
"Das Internet? Gibt's diesen Blödsinn immer noch?"
[Homer Simpson], Sicherheitsinspektor im Kernkraftwerk Springfield.
[Homer Simpson], Sicherheitsinspektor im Kernkraftwerk Springfield.
- ralfoertner
- Beiträge: 10
- Registriert: 08.10.2015 14:10:57
Re: Find - Ergebnisse in Array speichern ohne Pfad
Danke für deine Mühe.
Aber wie ich schon geschrieben habe ist das ./ gar nicht mehr mein Problem sondern die Doppelung der Werte.
Nämlich 1x mit ./ und einmal ohne (so wie es sein soll).
RO
Aber wie ich schon geschrieben habe ist das ./ gar nicht mehr mein Problem sondern die Doppelung der Werte.
Nämlich 1x mit ./ und einmal ohne (so wie es sein soll).
RO
- ralfoertner
- Beiträge: 10
- Registriert: 08.10.2015 14:10:57
Re: Find - Ergebnisse in Array speichern ohne Pfad
Hallo Meilo!Meillo hat geschrieben:10.06.2018 20:54:51Sieht so aus wie wenn du Null-terminiert lesen wuerdest, dein Input aber Newline-terminiert ist. Aber ich bin kein Bash-Profi.
Nach einem Blick in die Manpage der Bash frage ich mich, ob nicht das Builtin `readarray' das ist was du eigentlich verwenden solltest.
Kannst du das näher erläutern? Vielleicht mit einem Beispiel?
Danke schon mal.
Re: Find - Ergebnisse in Array speichern ohne Pfad
Klappt es denn in der Weise, wie die anderen es gepostet haben? Du kannst nicht unbedingt erwarten, dass du hier die perfekte Antwort auf exakt deine Frage bekommst, aber du bekommst Hinweise und Tipps, die dir helfen koennen, selber die Antwort zu finden. Arbeite also mit dem was hier beigetragen worden ist weiter, gerne auch im Dialog mit uns: Teste unsere Vorschlaege, modifiziere sie fuer deine Situation, poste was damit geht oder nicht geht. Dann haben wir vielleicht auch nochmal neue Tipps.ralfoertner hat geschrieben:11.06.2018 10:57:30Danke für deine Mühe.
Aber wie ich schon geschrieben habe ist das ./ gar nicht mehr mein Problem sondern die Doppelung der Werte.
Nämlich 1x mit ./ und einmal ohne (so wie es sein soll).
So auch hier:
Das kann ich leider nicht, da ich keine Bashisms verwende. Ich habe nur fuer dich in der Manpage der Bash nachgeschaut, ob ich dir vielleicht trotzdem helfen kann. Dabei bin ich zufaellig auf `readarray' gestossen und fand, dass sich das gerade so anhoert wie das was du suchst. Eine Webrecherche dazu wird dir bestimmt Beispiele liefern. Sonst probiere einfach aus. Mehr koennte ich auch nicht tun.ralfoertner hat geschrieben:11.06.2018 11:00:42Kannst du das näher erläutern? Vielleicht mit einem Beispiel?Meillo hat geschrieben:10.06.2018 20:54:51Sieht so aus wie wenn du Null-terminiert lesen wuerdest, dein Input aber Newline-terminiert ist. Aber ich bin kein Bash-Profi.
Nach einem Blick in die Manpage der Bash frage ich mich, ob nicht das Builtin `readarray' das ist was du eigentlich verwenden solltest.
Use ed once in a while!
Re: Find - Ergebnisse in Array speichern ohne Pfad
Nun, vielleicht doch ganz rudimentaer, ohne es ausprobiert zu haben:
Koennte evtl. in etwa so funktionieren, ganz ohne Schleife.
Code: Alles auswählen
find . -name "$kunde" -type d -printf '%f\n' | readarray folder
Use ed once in a while!
- ralfoertner
- Beiträge: 10
- Registriert: 08.10.2015 14:10:57
Re: Find - Ergebnisse in Array speichern ohne Pfad
Danke für eure Hilfe!
Habe das Problem mittlerweile mit
lösen können.
Danke für eure Hilfe!!!
Habe das Problem mittlerweile mit
Code: Alles auswählen
# Verzeichnisnamen einlesen
while IFS= read -r -d $'\0'; do
folder+=("$REPLY")
done < <(find . -name "$kunde" -type d -printf '%f\n' -print0)
Danke für eure Hilfe!!!
Zuletzt geändert von Meillo am 14.06.2018 21:46:50, insgesamt 1-mal geändert.
Grund: Code-Tags ergaenzt
Grund: Code-Tags ergaenzt