Kopieren von Dateien oder Verzeichnissen unter Ausschluss mehrerer Dateien oder Verzeichnisse

Kopieren von Dateien oder Verzeichnissen unter Ausschluss mehrerer Dateien oder Verzeichnisse
[@ysx-dlfwq-2 555]$ tree
.
├── 666
├── 777
│   └── 71.sh
├── 888
│   └── 8881
├── test2.sh
├── test.sh
└── test.txt

4 directories, 4 files

After executing the command
find /opt/share/555/ -mindepth 1 -type d \( -path /opt/share/555/666 -o -path /opt/share/555/888/8881 \) -o -type f \( -path /opt/share/555/test.txt \) -prune -o -exec cp -prf {} /opt/share/2/ \;

[@ysx-dlfwq-2 2]# tree
.
├── 71.sh           <<<----Files that should not appear
├── 777
│   └── 71.sh
├── 888
│   └── 8881        <<<----Directory that should not appear
├── test2.sh
└── test.sh

3 directories, 4 files

Unsere Umgebung erlaubt nur die Verwendung integrierter Systembefehle, und rsync kommt nicht in Frage. Wenn mir derzeit keine Befehle bekannt sind, die reguläre Ausdrücke unterstützen, könnten die Experten mir dann bitte helfen?

Antwort1

Mir ist nicht ganz klar, was Sie erreichen möchten, aber ...

Sie können verwenden, findum eine Liste der zu kopierenden Dateien zu generieren, diese zum Filtern weiterzuleiten grepund das Ergebnis an die Stelle weiterzuleiten, an der cpiodie Dateien tatsächlich kopiert werden:

find /opt/share/555/ -type f |
  grep -v 'whatever' |
  cpio -pd /opt/share/2

Auf diese Weise können Sie mit regulären Ausdrücken steuern, was kopiert wird und was nicht.

verwandte Informationen