复制文件或目录并排除多个文件或目录

复制文件或目录并排除多个文件或目录
[@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

我们的环境只允许使用系统自带的命令,rsync 不在考虑范围内,如果目前我所知道的没有支持正则表达式的命令,请高手指点一下好吗?

答案1

我不太清楚你想做什么,但是......

您可以使用它find来生成要复制的文件列表,通过grep它进行过滤,然后将结果通过管道传输到cpio实际复制文件:

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

这使得您可以使用正则表达式来控制复制或不复制的内容。

相关内容