我有一个非常大的源代码目录结构,很难使用。我想运行一个工具将其转换为对我更有效的类似 Maven 的结构。当我完成我的工作时,我再次运行该工具将 Maven 结构转换回原来的糟糕结构。我非常熟悉各种 shell,是的,我可以编写一个包含数百个 cp 命令的脚本。但这将很难维持。
我希望能够使用 Perforce 的三点通配符之类的东西来移动或复制文件:
匹配当前工作目录和所有子目录下的所有文件。(匹配任何内容,包括斜杠,并且跨子目录匹配)
我的脚本将包含如下命令:
cp src/.../foobar/.../*.java trusted/src/main/java/.../foobar/.../*.java
Run Code Online (Sandbox Code Playgroud)
这个想法是移动目录的子树,同时保持该子树的结构。
有任何想法吗?
我在使用 Gilles 的 rsync 解决方案时遇到问题。这是一个测试脚本:
#!/bin/bash
rm -rf source
mkdir -p source/server/src/com/bodhi/foobar/this
mkdir -p source/server/src/com/bodhi/foobar/that
mkdir -p source/server/src/com/bodhi/other
echo "Hello World" > source/server/src/com/bodhi/foobar/this/A.java
echo "Hello World" > source/server/src/com/bodhi/foobar/that/B.java
echo "Hello World" > source/server/src/com/bodhi/other/C.java
rm -rf target
mkdir -p target/foobar/src/main/java
rsync \
--include='**/foobar/**/*.java' \
--include='**/foobar/**/' \
--exclude='*' \
--prune-empty-dirs \
source/server/src/ target/foobar/src/main/java/
Run Code Online (Sandbox Code Playgroud)