Verschieben der Verzeichnisse mit dem Befehl find

0

Ich versuche, ein bestimmtes Verzeichnis in einem Pfad zu finden und das Verzeichnis mit find in einen anderen Pfad zu verschieben.

Das Quellverzeichnis sieht wie folgt aus:

/Dir1/country1/month1/date1,date2,date3
/Dir1/country2/month1/date1,date2,date3
...
.
.
/Dir1/country10/month1/date1,date2,date3

Ich versuche, date1-Verzeichnis zu finden und zum Ziel zu wechseln

/ Backup / source1 / dir1 /

Ich benutze folgenden Befehl

[root @ mytest Dir1] # find -name "date1" -exec mv {} / Backup / source1 / Dir1 / {} \;

und ich erhalte unter Fehler.

mv: Besitz für "/Backup/source1/Dir1/./country1/month1/date1/date1/date1_1.txt" konnte nicht beibehalten werden: Vorgang nicht zulässig

Nicht sicher, wie Duplikationen von date1 Directory in destination und "./" entfernt werden können, führt ebenfalls zu Problemen .

Beste Wünsche, KJ

KumarJohn
quelle
1
Der Fehler, den Sie erhalten, impliziert, dass entweder nicht mit den richtigen Berechtigungen ausgeführt wird oder das Zieldateisystem die Berechtigungen nicht verarbeiten kann. Warum nicht Ihren find-Befehl neu ausrichten, um cp und rm auszuführen?
Davidgo

Antworten:

0

Auf der Linux-Manpage heißt es:

mv - Dateien verschieben (umbenennen)

Sie können also kein mvVerzeichnis verschieben. Sie können es jedoch zuerst kopieren und dann die alte Kopie löschen. Dieser Befehl

   SRC_DIR=$(find . -type d -name date1 -print); echo $SRC_DIR

speichert den relativen Pfad zu dem Verzeichnis, an dem Sie interessiert sind, in einer praktischen Variablen. Jetzt können wir das Verzeichnis an der neuen Position machen,

   mkdir /Backup/source1/$SRC_DIR

vorausgesetzt, Sie haben die Berechtigung dazu: Tatsächlich handelt es sich bei der obigen Fehlermeldung um eine unzureichende Berechtigung zum Erstellen einer neuen Datei (es sollte sich um einen Ordner handeln, wurde jedoch aufgrund des obigen Fehlers zu einer Datei). Sind Sie sicher, dass das neue / Backup / dir1 Ihnen gehört? Sie sollten das überprüfen und beheben.

Jetzt können Sie alle Inhalte rekursiv in das neue Verzeichnis kopieren:

   cp -R $SRC_DIR/* /Backup/dir1/$SRC_DIR
   cp -R $SRC_DIR/.[a-Z]* /Backup/dir1/$SRC_DIR

und zuletzt können Sie die alte Kopie löschen, wenn Sie:

   cd $SRC_DIR
   rm -fR *
   rm -fR .[a-Z]* 

und jetzt ist das Verzeichnis leer und kann gelöscht werden.

MariusMatutiae
quelle
danke für die eingaben. Ich führe den Befehl als root-Benutzer aus und das Zielverzeichnis gehört nur root. Ich habe viele Verzeichnisse, die ich verschieben muss und von großer Größe, also suchte
ich
@KJT Funktionieren die von mir vorgeschlagenen Befehle?
MariusMatutiae
0

Anstatt move, ein stumpfes Tool, zu verwenden, sollten Sie rsync ausprobieren, mit dem Verzeichnisbäume im Archivierungsmodus verschoben werden können, wobei Berechtigungen und sowohl weiche als auch harte symbolische Links erhalten bleiben.

Wenn Sie updatedbals root eingeben, wird auch die locateDatenbank der Dateien aktualisiert, die sich in den verschiedenen Pfadstrukturen der installierten Pakete befinden. Binaries, Manpages und Source Trees. Die Suche mit whereisoder locateist wesentlich schneller als die Suche auf der Festplatte.

Rowan Hawkins
quelle