
[@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
Nosso ambiente permite apenas o uso de comandos integrados do sistema e o rsync não está sendo considerado. Se não houver comandos que suportem expressões regulares que eu conheça atualmente, os especialistas poderiam ajudar?
Responder1
Não estou um pouco claro sobre o que você está tentando realizar, mas ...
Você pode usar find
para gerar uma lista de arquivos para copiar, passá-la grep
para filtrá-la e canalizar o resultado para cpio
realmente copiar os arquivos:
find /opt/share/555/ -type f |
grep -v 'whatever' |
cpio -pd /opt/share/2
Isso permite que você use expressões regulares para controlar o que é ou não copiado.