find exec und mv: Fehlermeldung trotz Erfolg

W

Wlet

Grünschnabel
Hallo,

ich habe mir ein kleines Shellskript gebastelt, was die Aufgabe hat, ein Verzeichnis zu durchsuchen, und falls es darin einen oder mehrere Ordner hat diese zu verschieben:

Code:
#!/bin/bash

SCPROOTDIR=/root/adir
PUBDIR=oeffentlich

PUBGAL=/root/pubgal/albums/

cd $SCPROOTDIR"/"$PUBDIR
find . -not -name "." -type d -exec mv --reply=yes {} $PUBGAL \;

Das Skript an sich funktioniert, nur erhalte ich, wenn sich darin bspw. ein Ordner "My Pictures" befindet die Fehlermeldung:
find: ./My Pictures: No such file or directory

Warum ist das so, bzw. was ist an o.g. Statement falsch?

mfg

wlet
 
Das Problem ist, dass find eine Liste von gefundenen Dirs erstellt und diese dann mittels -exec abarbeitet. Wenn zum Beispiel ein Verzeichnis abc und darin ein Verzeichnis def hast, dann sieht die Liste von find derart

Code:
abc
abc/def

aus. Wenn nun abc bewegt wird, dann ist abc/def nicht mehr gültig. Du kannst das vermeiden, indem Du die Rekursionstiefe von find einschränkst.

Gruss, Xanti
 
Zuletzt bearbeitet:
Hi,

danke für den Hinweis.

Ich hab jetzt mal noch ein wenig gesucht bzw. manpage gelesen. Mit "-prune" als weiterem Parameter wird die Reihenfolge umgedreht, und damit bin ich die Fehlermeldung los.

cu

Wlet
 
Da hast Du die man-page nicht ausreichend gelesen, denn Deine Aussage bezüglich -prune stimmt so nicht. Mit -prune wird nur verhindert, dass find in die Verzeichnisse absteigt. Wahrscheinlich ist das aber genau das, was Du suchst.

btw, die -depth-Option ist auch hilfreich bei solchen Problemen.

Gruss, Xanti
 
Hi,

kann es nicht auch sein, dass er wegen dem Leerzeichen im Dateinamen meckert?
 
Schlaubi_fi.de schrieb:
Hi,

kann es nicht auch sein, dass er wegen dem Leerzeichen im Dateinamen meckert?

Nicht bei meinem find. Ich denke find übergibt den Dirnamen als String. Finde aber auch gerade nix dazu in der manpage.

Gruss, Xanti
 
Soviel ich weiß, unterscheiden sich der find ein wenig zwischen BSD und linux.
 
@schlaubifi: Da der Fehler bei -prune verschwindet, vermute ich mal, dass es nicht an Leerzeichen lag.

@root1992: Ja, find ist unter FreeBSD und Linux marginal verschieden. Richtig unterscheiden sich die xargs-Versionen, was doch recht nervig ist.

Gruss, Xanti
 
Jepp, da musste ich erst mal alle Shs ausbessern, in denen ich find benutzt habe.
 
Zurück
Oben