Wie kann ich Dateien bewegen ein Verzeichnis, wo es vielleicht Hunderte oder Tausende von Dateien in dem Verzeichnis befinden , und Sie können nicht sicher sein , ob es Betrogenen in ..
. Welche Methode würden Sie verwenden?
Der Umgang mit Dupes ist unterschiedlich, manchmal werden wir überschreiben, manchmal müssen wir sicherer sein. E / A kann wichtig sein, da dies Produktionsserver sind. Bei gegebener Menge ist eine Aufforderung zur Eingabe nicht doppelter Dateien jedoch keine Option. Die Beibehaltung von Berechtigungen, Zeitstempeln usw. ist wichtig. Wir werden normalerweise nicht wissen, was die Daten sind.
Oh und es mv
ist nicht erforderlich rsync
, cp
Lösungen willkommen.
Hinweis: Wir verwenden CentOS 5.5. Lassen Sie mich wissen, wenn es dort nicht funktioniert, da es sich um eine neuere ... Funktion handelt
quelle
mv
ob und wie uns die Aufbewahrung im Fall von ... wichtig ist und ob wir bereits ein Backup erstellt haben. Diese Frage ist ziemlich offen. Ich suche nur nach guten Optionen und vielleicht nach einem Kommentar darüber, ob und wie es dich beißen kann oder nicht.mv * ../
odermv -i * ../
?Antworten:
Ich würde empfehlen, rsync vom übergeordneten Element zu verwenden:
Dadurch werden alle vorhandenen doppelten Dateien im übergeordneten Element in der Datei -original gesichert.
quelle
-a
impliziert-r
-l
fürcp
)-H
oder--hard-links
für rsync verwenden, um feste Links beizubehalten .--link-dest=DIR
Flag verwenden, um dieses Verhalten zu erreichen: Esrsync -avP --link-dest=/path/to/src /path/to/src/* /path/to/dest/
wird eine feste Verknüpfung zu dst / unveränderten Dateien zwischen src und src, in diesem Fall allen Dateien, hergestellt. Normalerweise wird dieses Flag verwendet, wenn Sie Sicherungsdateien erneut verknüpfen möchten, ohne deren Daten zu kopieren, z--link-dest=/most/recent/backup
.Dadurch wird alles im aktuellen Verzeichnis in das darüber liegende Verzeichnis kopiert, wobei alle Berechtigungen beibehalten werden. Wenn möglich, werden Hardlinks verwendet, um die E / A zu minimieren. Bei Duplikaten wird der Dateiname ~ erstellt
danach
quelle
In diesem Beispiel werden Dateien von '/ parent / old-dir' nach '/ parent' verschoben:
Durch rsync-Regeln werden Dups durch neuere Dateien aus ersetzt
old-dir
.quelle
Du kannst es versuchen
das wird betrogene Dateien in .. überschreiben.
Sie können mv -u '{}' verwenden, um nicht zu überschreiben, wenn der Dupe in .. gleich oder neuer ist
quelle
..
an denmv '{}' +
Befehl übergeben wird, da das + nur am Ende hinzugefügt wird.-exec mv -t .. -- {} +
. Tragbar :-exec sh -c 'mv -- "$@"' _ {} +
.mv -i
fordert nur auf, wenn das Ziel vorhanden ist.yes n | mv -i …
verschiebt alle Dateien, die nicht im Zielverzeichnis vorhanden sind. Unter FreeBSD und OSX können Sie dies auf kürzenmv -n …
.Beachten Sie, dass keines dieser Elemente ein Verzeichnisargument mit einem vorhandenen Verzeichnis mit demselben Namen im Zielverzeichnis zusammenführt.
Ein separates Problem ist, wie auf alle Dateien im aktuellen Verzeichnis reagiert wird. Es gibt zwei Probleme: Alle Dateien
*
abrufen ( Punktdateien werden weggelassen) und keine Befehlszeile angezeigt. Unter Linux (oder allgemeiner mit GNU find und GNU coreutils):Mit GNU finden, aber nicht GNU-Coreutils (oder ältere GNU-Coreutils):
Tragbar:
Wie immer macht zsh die Sache einfacher. Es gibt intern keine Beschränkung der Befehlszeilenlänge. Wenn Sie also die integrierte
mv
Befehlszeile verwenden, müssen Sie sich darüber keine Gedanken machen. Und Sie können festlegen, dass Punktdateien mit demD
Glob-Qualifikationsmerkmal nicht ignoriert werden sollen . Einschränkung: Dies funktioniert nicht in allen Dateisystemen (ab zsh 4.3.10).quelle
Ich sagte auf unserer ML
Offensichtlich ist dies nicht sehr sicher ... es wird Dinge überschreiben. Es könnte Grenzen haben, auf die ich nie gestoßen bin.
quelle
-
. Es werden keine Dateien abgefangen, deren Name mit beginnt.
.Das Folgende ist eine Python-Vorlage, die ich in der Vergangenheit effektiv verwendet habe.
quelle