So kopieren Sie nur bestimmte Dateien und Unterverzeichnisse

So kopieren Sie nur bestimmte Dateien und Unterverzeichnisse

Hallo, nehmen wir an, ich habe ein Verzeichnis wie dieses:

/
    my_work
               /dir1
                    keepdir1.ddd
                    keepdir2.ddd
                    file.cfg
                    (lots of files and directories I don't want)
               /dir2
                    (same layout as dir 1)

Ich möchte also das Verzeichnis „my_work“ und alle Unterverzeichnisse „dir1“, „dir2“ usw. kopieren. Aber in jedem dieser Verzeichnisse möchte ich nur bestimmte Dateien und bestimmte Verzeichnisse behalten. In den Verzeichnissen, die ich behalte, möchte ich rekursiv alles einschließen.

Folgendes habe ich bisher versucht, aber nichts scheint sich kopieren zu lassen:

rsync -rl --include-from=~/rsync_include /my_work ~/backup

Und der Inhalt von rsync_include ist:

+ *file.cfg
+ *keepdir*/*
- *

Antwort1

Sofern Sie nicht vergessen haben, wichtige Informationen anzugeben, funktioniert das folgende Skript.

#!/usr/bin/env bash

for DIR in my_work/* ; do
    mkdir -pv dest/"$DIR"
    cp -av "$DIR"/*.cfg "$DIR"/keepdir* dest/"$DIR"
done

Beispielausgabe mit nicht anwendbaren Platzhaltern, die Nachrichten erzeugen:

dest
dest/my_work
dest/my_work/dir1
my_work/dir1/file.cfg -> dest/my_work/dir1/file.cfg
my_work/dir1/keepdir1.ddd -> dest/my_work/dir1/keepdir1.ddd
my_work/dir1/keepdir2.ddd -> dest/my_work/dir1/keepdir2.ddd
dest/my_work/dir2
my_work/dir2/file.cfg -> dest/my_work/dir2/file.cfg
cp: my_work/dir2/keepdir*: No such file or directory
dest/my_work/dir3
cp: my_work/dir3/*.cfg: No such file or directory
cp: my_work/dir3/keepdir*: No such file or directory

verwandte Informationen