Linux-Bash: Find Ergebnis in Anführungszeichen ausgeben?
Hallo Zusammen,
ich habe ein kleines Script geschrieben, welches mir einen bestimmten Dateityp heraussucht und in einen Neuen Ordner kopiert: **/#!/bin/bash
echo "Pfad:" read pfad
echo "Endung:" read endung
echo "Ziel:" read ziel
for i in $( find "/$pfad" -name "$endung" ); do cp $i $ziel done*
Es funktioniert soweit auch alles. Das Problem ist nur, wenn in den gesuchten Unterverzeichnissen oder der Datei selbst ein Leerzeichen vorhaben ist, wird es nicht erkannt.
Ist es möglich die find ausgabe in " " zu setzen ?
Vielen Dank!
3 Antworten
Versuch mal statt
for i in $( find "/$pfad" -name "$endung" ); do cp $i $ziel done*
das:
find "/$pfad" -name "$endung" -exec cp "{}" "$ziel" \;
Siehe auch: man 1 find
Wie andere ja schon geschrieben haben, führt die Klammerung mit " zum Ziel.
Was mir aber an deinem Beispiel auffällt: find ... -name ...
Wenn du wirklich nur die Endung als Suchargument angibst, dürftest du eigentlich keine Resultate bekommen! Ändere die Zeile mit find ab auf
for i in $( find -type f "$pfad" -name "*$endung"); do cp -ipvu "$i" $ziel; done
Vorteil:
- Die Suche beginnt im aktuellen Verzeichnis statt ab der Wurzel
- alle Dateien, die mit endung aufhören, werden protokolliert und nur überschrieben, wenn sie älter sind
Annahme: du gibst nur die Erweiterung (endung) an
Mit "find -L ..." werden auch verlinkte Dateien berücksichtigt und mit "-iname ..." wird nicht auf die exakte Schreibweise geachtet.
Mit ? oder ?? in endung können abweichende Zeichen auftreten, z.B. od? (für OpenOffice-Dokumente).
Aber warum so kompliziert? Besser
find "$pfad" -type f -name "*$endung" -exec cp -ipvu {} $ziel \;
Da es sich ja scheinbar um eine BackUp-Operation handelt:
Vorsicht mit verlinkten Dateien ... da wird wohl nur der Link gesichert!
Mit dem cp -R werden auch Unterverzeichnisse bearbeitet.
Hallo
ich habe ein kleines Script geschrieben, welches mir einen bestimmten Dateityp heraussucht und in einen Neuen Ordner kopiert:
Das hättest Du besser in Code-TAGs gesetzt, dann sieht es gleich viel besser aus:
#!/bin/bash
echo Pfad:
read pfad
echo Endung:
read endung
echo Ziel:
read ziel
for i in $(find $pfad -iname "$endung") ;
do
cp $endung $ziel ; ls -ZIEL ;
done
Ist es möglich die find ausgabe in " " zu setzen ?
Klar so zum Beispiel:
pfad=$(echo $pfad|sed 's/^/"/g'|sed 's/$/"/')
Es gibt aber immer mehr als einen Weg und meiner ist jetzt nicht unbedingt der für Dich bessere.
Linuxhase