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).