我需要编写一个脚本,它会递归复制一个目录,但只复制子目录和某个RegEx匹配的文件。例如对于这样的树:
.
└── toCopy
├── A
│ ├── 123
│ ├── D
│ │ └── rybka23
│ ├── file
│ ├── file1
│ └── random
├── B
├── C
│ ├── file_25
│ └── somefile
└── E1
└── something
对于RegEx
。* [0-9] +
我需要一个新目录:
newDir
├── A
│ ├── 123
│ ├── D
│ │ └── rybka23
│ └── file1
├── C
│ └── file_25
└── E1
所以我的第一个想法是这样的:
find toCopy -regex ".*[0-9]+" -exec cp -R '{}' newDir \;
但这并没有真正起作用,因为我只获取了我需要复制的文件/目录的路径,而且我不知道如何从它们构建树。 我真的很感激有关如何做到这一点的任何提示。
答案 0 :(得分:1)
您可以使用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
,因为我们正在使用流程替换。