
[@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, find
um eine Liste der zu kopierenden Dateien zu generieren, diese zum Filtern weiterzuleiten grep
und das Ergebnis an die Stelle weiterzuleiten, an der cpio
die 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.