首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三点通配符

三点通配符
EN

Unix & Linux用户
提问于 2015-02-02 22:33:09
回答 1查看 9.3K关注 0票数 5

我有一个非常大的源代码目录结构,很难使用。我想运行一个工具来将它转换为一个更适合我的类似Maven的结构。当我完成我的工作后,我再次运行这个工具,将Maven结构转换回原来可怕的结构。我非常熟悉各种shell,是的,我可以编写一个包含数百个cp命令的脚本。但这将很难维持。

我希望能够移动或复制文件,使用类似Perforce公司的三重点通配符:

匹配当前工作目录下的所有文件和所有子目录。(匹配任何内容,包括斜杠,并跨子目录这样做)

然后,我的脚本将包含如下命令:

代码语言:javascript
复制
cp src/.../foobar/.../*.java trusted/src/main/java/.../foobar/.../*.java

这样做的目的是移动目录的子树,同时维护该子树的结构。

有什么想法吗?

我对吉尔斯的rsync解决方案有异议。下面是一个测试脚本:

代码语言:javascript
复制
#!/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/
EN

回答 1

Unix & Linux用户

发布于 2015-02-02 23:00:54

这个通配符存在于ksh93、bash≥4.3 (如果没有指向树中目录的符号链接)和zsh中。它拼写为**。在ksh93中,首先需要用set -o globstar激活它。在bash中,首先需要用shopt -o globstar激活它。

代码语言:javascript
复制
ls -l src/**/foobar/**/*.java

不过,这不足以复制副本。cp的目标是一个目录,cp不执行任何通配符匹配。您不能使用一个cp命令将文件放在不同的位置。

您可以使用rsync代替。将源树的根和目标树的根传递给它,并定义包含和排除规则,以便只复制所需的文件和指向它们的目录。Rsync也会复制空目录,如果它们与模式匹配,您可以让它在使用--prune-empty-dirs之后删除它们。

代码语言:javascript
复制
rsync --include='**/foobar/**/*.java' --include='**/' \
      --exclude='*' --prune-empty-dirs \
      src/ trusted/src/main/java/

您可以使用的另一个工具是帕克斯。请注意,pax是标准的,因为它是由POSIX定义的(与rsync不同),但是一些Linux发行版在默认安装中忽略了它(不过,它始终可以作为包使用)。这种方法类似于rsync:包含.java文件,排除其他文件;语法有点奇怪:您指定了一个模式替换(它可以是包含文件而不是重命名的原始模式),也可以指定一个空替换来排除文件。根据需要,在目标中自动创建前导目录。

代码语言:javascript
复制
pax -rw -s '/\.java$/&/' -s '/.*//' src/* trusted/src/main/java/
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/182548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档