regex - Shell - 使用正则表达式匹配保留树结构递归复制目录
问题描述
我需要编写一个脚本,它会递归地复制一个目录,但只复制某个正则表达式匹配的子目录和文件。例如对于这样的树:
.
└── toCopy
├── A
│ ├── 123
│ ├── D
│ │ └── rybka23
│ ├── file
│ ├── file1
│ └── random
├── B
├── C
│ ├── file_25
│ └── somefile
└── E1
└── something
对于正则表达式
.*[0-9]+
我需要获取一个新目录:
newDir
├── A
│ ├── 123
│ ├── D
│ │ └── rybka23
│ └── file1
├── C
│ └── file_25
└── E1
所以我的第一个想法是这样的:
find toCopy -regex ".*[0-9]+" -exec cp -R '{}' newDir \;
但这并没有真正起作用,因为我只获得了我需要复制的文件/目录的路径,我不知道如何从它们构建树。我真的很感激任何关于如何做到这一点的提示。
解决方案
您可以使用find
命令并循环查看结果:
#!/usr/bin/env bash
cd toDir
while IFS= read -rd '' elem; do
if [[ -d $elem ]]; then
mkdir -p ../newDir/"$elem"
else
d="${elem%/*}"
mkdir -p ../newDir/"$d"
cp "$elem" ../newDir/"$d"
fi
done < <(find . -name '*[0-9]*' -print0)
这需要bash
我们使用进程替换。
推荐阅读
- c++ - 检查智能指针是否为空的模板函数
- javascript - 如何在刀片文件 laravel 5.6 中获取当前路由名称
- angular5 - Angular 5:解决构造函数中未解决的依赖关系
- windows - 使用批处理从行中提取字符串
- r - 山脊线密度图顶部的线被截断
- javascript - 未捕获的类型错误:无法使用 'in' 运算符在 jQuery/WordPress 中以 true 搜索 'length'
- python - Python 对象数学
- php - 需要在每个数组索引中找到指定的字符串下一个单词
- apache-flink - 根据时间戳同步 Apache Flink 流
- swift - 管理用户 Presense 'onDisconnect' Firebase 和 Swift?