find und Leerzeichen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

find und Leerzeichen

Beitrag von Ozelot » 05.09.2010 15:41:09

Ich will rekursiv für jede Datei in einem Verzeichnis ein Programm abarbeiten lassen. Mit find bekomme ich auch eine Liste aller Dateien, aber

Code: Alles auswählen

for i in `find`
reißt natürlich Dateinamen auseinander, wenn sie Leerzeichen enthalten. Wie kann ich das verhindern?

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: find und Leerzeichen

Beitrag von Liffi » 05.09.2010 19:09:30

Ozelot hat geschrieben:Ich will rekursiv für jede Datei in einem Verzeichnis ein Programm abarbeiten lassen. Mit find bekomme ich auch eine Liste aller Dateien, aber

Code: Alles auswählen

for i in `find`
reißt natürlich Dateinamen auseinander, wenn sie Leerzeichen enthalten. Wie kann ich das verhindern?
Z.B. mit xargs

Code: Alles auswählen

find . -print0 | xargs -0 <command>

pluvo

Re: find und Leerzeichen

Beitrag von pluvo » 05.09.2010 19:18:14

Du kannst den Befehl auch bei find unterbringen. Einige Beispiele:

Code: Alles auswählen

find -type f -name *thumb* -exec rm {} \;

Code: Alles auswählen

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

Code: Alles auswählen

find Ordner/ -type f -exec sha256sum {} \; > .SHA256SUMS

Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Re: find und Leerzeichen

Beitrag von Ozelot » 06.09.2010 00:17:40

Ja, an xargs oder exec hatte ich auch gedacht. Aber ich will nicht einen einzelnen Befehl, sondern ein ganzes Programm, das ich sukzessive komplizierter machen werde, auf jeden Eintrag anwenden (Ich will mir eine eigene angepaßte Volltextsuche bauen).

Besser wäre daher, wenn ich den Eintrag innerhalb einer Schleife in einer Variable zur Verfügung hätte. Oder kann ich irgendwie eine Funktion definieren, die ich mit exec/xargs aufrufe? Dann hätte ich ja den gleichen Effekt.

pluvo

Re: find und Leerzeichen

Beitrag von pluvo » 06.09.2010 00:25:57

Ozelot hat geschrieben:Aber ich will nicht einen einzelnen Befehl, sondern ein ganzes Programm, das ich sukzessive komplizierter machen werde, auf jeden Eintrag anwenden
Du kannst doch dein kompliziertes Programm unter /usr/local/bin ablegen. Und das rufst du einfach mit „find“ & „-exec“ auf.

Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Re: find und Leerzeichen

Beitrag von Ozelot » 06.09.2010 10:55:15

Ja, das ginge natürlich.
Es gibt also keine Möglichkeit, das innerhalb eines einzigen Skripts zu haben?
Verlangsamt sich die Ausführung sehr, wenn ich die Sache auf zwei Skripte verteile?

diggerchen
Beiträge: 115
Registriert: 15.01.2005 22:35:26

Re: find und Leerzeichen

Beitrag von diggerchen » 06.09.2010 13:30:13

Wie wär's denn mit sowas:

Code: Alles auswählen

find . -type f | while read a; do
  # mache hier irgendwas mit dem Dateinamen...
  echo $a
done
Da haste in $a immer den ganzen Dateinamen inkl. Leerzeichen.

Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Re: find und Leerzeichen

Beitrag von Ozelot » 06.09.2010 13:34:21

Juhuu - genau das meinte ich. Danke!

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: find und Leerzeichen

Beitrag von rendegast » 06.09.2010 17:34:59

Das $a aber quoten,

Code: Alles auswählen

...
  echo "$a"
...
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten