Erstellen Sie einen symbolischen Link für eine Datei in einem Baum zu einem anderen Ordner und behalten Sie die Ordnerstruktur bei

Erstellen Sie einen symbolischen Link für eine Datei in einem Baum zu einem anderen Ordner und behalten Sie die Ordnerstruktur bei

Angenommen, dieser Baum (top-X und tX-sub-X sind Ordner und alle Unterordner enthalten eine CSV-Datei und verschiedene andere Dateierweiterungen.)

Base
├── top-1
│   ├── t1_sub-1 
│   ├── t1_sub-2 
│   └── t1_sub-3 
└── top-2
    ├── t2_sub-1
    ├── t2_sub-2
    └── t2_sub-3

und alle Unterordner, die eine CSV-Datei und verschiedene andere Dateierweiterungen enthalten.

kann ich für alle CSV-Dateien in der Basis einen symbolischen Link zu einem anderen Baum erstellen und Folgendes erhalten:

Symlinked_base
├── top-1 #directories aren't symlink
│   ├── t1_sub-1 #contains only .csv symlink
│   ├── t1_sub-2 
│   └── t1_sub-3 
└── top-2
    ├── t2_sub-1
    ├── t2_sub-2
    └── t2_sub-3

Ich kann es jetzt nicht testen, würde aber:

sudo find . -name "*.csv" -exec cp -Rs '{}' /path/to/Symlinked_base/

Wenn -R nicht unterstützt wird, würde Folgendes funktionieren?:

 sudo find . -name "*.csv" -exec cp -parents -s '{}' /path/to/Symlinked_base/

Antwort1

Stow ist ein Paket zur Verwaltung von Symlink-Bäumen. Sie können die Option --no-folding verwenden, um Verzeichnisse am Ziel zu erstellen, anstatt die Verzeichnisse selbst zu verknüpfen – damit sollten Sie das gewünschte Ergebnis erzielen.

https://www.gnu.org/software/stow/manual/stow.html

verwandte Informationen