Symlink für alle Dateien, jedoch nur bestimmte Erweiterungen kopieren

595
Mike

Ich frage mich, wie ich in der Lage sein könnte, alle Dateien in einer Verzeichnisstruktur zu verknüpfen und dann auch Dateien einer bestimmten Erweiterung in dieses Verzeichnis zu kopieren. Im Grunde symboliere ich alle Dateien innerhalb von / foo / a, b, c mit / bar / a, b, c und kopiere dann bestimmte Dateien mit bestimmten Erweiterungen.

2
Ich gehe davon aus, dass dies Linux ist. soandos vor 13 Jahren 0
Ja, Entschuldigung, in Linux. Mike vor 13 Jahren 0
War / foo / a / foo / b foo / c Verzeichnisse? Müssen Sie die gesamte Verzeichnisstruktur unter / foo kopieren, alle Dateien eines bestimmten Ext (in tree / foo) symbolisieren und schließlich alle Dateien eines bestimmten ext (in tree / foo) kopieren? Nicholi vor 13 Jahren 0

1 Antwort auf die Frage

0
Nicholi

Erstellen Sie im Verzeichnis / bar alle Symlinks für alles außer diesen Erweiterungen.

find ../foo/ -type f ! -name '*.txt' ! -name '*.baz' -exec ln -s '{}' \; 

Und dann alle Erweiterungen zu kopieren, größtenteils derselbe Befehl.

find ../foo/ -type f \( -name "*.txt" -o -name "*.baz" \) -exec cp '{}' ./ \; 

Bearbeiten : Kopieren Sie die gesamte Verzeichnisstruktur, symbolisieren Sie einige Dateien, kopieren Sie andere. Ich war mir nicht sicher, ob dies mit einem einzigen Befehl möglich war, lernte aber nur ein paar nützliche Tricks mit find.

find foo/ -type d -printf "mkdir -vp 'bar/%p'\n" -o -type f ! -name "*.txt" ! -name "*.baz" -printf "ln -vs '../%p' 'bar/%p'\n" -o -type f \( -name "*.txt" -o -name "*.baz" \) -printf "cp -v %p bar/%p\n" | sh mv bar/foo/* bar/ && rm -R bar/foo/ 

Wichtig ist nur, wenn Sie den symbolischen Link erstellen, den Sie für den tatsächlichen Pfad angeben, den die Links für foo / benötigen. Mein Beispiel zeigt relative Links, wenn diese nebeneinander liegen (könnten auch absolute symbolische Links sein).

Tolle Arbeit, das wirkt Wunder! Vielen Dank für das Teilen des Wissens zu finden !! Gutes Zeug.. Mike vor 13 Jahren 0