Ich habe einen Ordner SOURCE, der mehrere Unterordner mit jeweils eigenen Dateien enthält.
Ich möchte diesen Ordner in einen neuen Ordner COPY kopieren, wo ich die Verzeichnisstruktur kopieren muss, aber die Dateien als symbolische Links zu den Originaldateien in SOURCE und seinen Unterordnern behalte.
Antworten:
Hier ist die Lösung für nicht eingebettetes Linux und Cygwin:
Beachten Sie, dass SOURCE ein absoluter Pfad und ein abschließender Schrägstrich sein muss. Wenn Sie einen relativen Pfad angeben möchten, können Sie verwenden
quelle
SOURCE
das ein relativer weg ist dann denke ich schon. Probieren Sie es aus, und wenn dies nicht funktioniert, möchten Sie möglicherweise eine neue Frage stellen. Verweisen Sie auf jeden Fall auf diese.Es gibt mindestens 2 Standarddienstprogramme zum Erstellen eines Schattenverzeichnisbaums eines vorhandenen Baums, sodass hier kein Code geschrieben werden muss.
Zuerst gibt es
lndir(1)
aus demxutils-dev
Paket. Es werden Symlinks zu Dateien verwendet. Von der Manpage:Eine vielleicht bessere Alternative ist es, einfach
cp
mit den richtigen Optionen zu arbeiten, wie die akzeptierte Antwort nahelegt. Ich gebe nur ein paar hoffentlich nützliche Details:Wenn Sie nicht alle Attribute (Eigentumsrechte / Berechtigungen, Zeiten) beibehalten möchten, ersetzen Sie die
a
Option (äquivalent zu-dr --preserve=all
) durchr
(nur rekursiv):quelle
lndir
ist auch als Shell-Skript hier verfügbar, falls es nicht installiert ist: opensource.apple.com/source/X11/X11-0.46.4/lndir.sh?txtSie können einige Suchbefehle wie diesen ausprobieren:
quelle
So etwas wird tun, was Sie brauchen.
Verzeichnisse werden im Ziel-COPY-Baum erstellt. Alles andere ist mit dem absoluten Pfad innerhalb des SOURCE-Baums verknüpft. Stellen Sie sicher, dass sowohl SOURCE als auch COPY als absolute Pfade angegeben sind (beginnend mit
/
).Wenn Sie einen großen Baum zum Kopieren haben und einen Pro-Verzeichnis-Fortschrittsbericht möchten, können Sie ihn
echo "$ITEM" >&2;
direkt vor demmkdir
Befehl hinzufügen .(Ich habe mir das angeschaut
cp
undcpio
es scheint auch keine Möglichkeit zu geben, mit symbolischen Links auf die Quelle zu verlinken.)quelle
{ mkdir -p "$COPY/$ITEM"; continue; }
ksh
Drehbuch geschrieben ... aber es sieht so aus, als ob das auch notwendig istbash
. FixingWenn in SOURCE keine leeren Verzeichnisse vorhanden sind, die kopiert werden müssen
quelle
cp
sowieso von GNU ausgehen , warum nichtcp -as
?Ich würde damit beginnen, das Perl auszubrechen:
File::Find
ist ein nützliches Modul, mit dem Sie eine bestimmte Unterroutine für eine beliebige Datei in einem Verzeichnisbaum ausführen können. In diesem Fall prüft das Sub, ob es sich um ein Verzeichnis handelt - und wenn ja, um einemkdir
oder eine Datei. In diesem Fall führt es einen Symlink durch.quelle
Es scheint, dass Sie nach etwas wie dem Werkzeug suchen
rsnapshot
; Es werden Kopien beliebiger Verzeichnisse erstellt und wenn möglich Hardlinks verwendet. (Sehen Sie in der Manpage nach, ob das passt.)quelle