我在 ./src/ 下有一个目录树
我在 ./work/ 下有另一个匹配的目录树
我正在尝试复制 src 中的所有文件来进行工作,同时保留目录结构并排除所有以 .java 结尾的文件。
这是我迄今为止的尝试:
find src -type f ! -iname *.java -exec cp {} work \;
这几乎可以工作,但是所有文件都被放入工作下的顶层,而不是目录树中的正确位置。
我怎样才能做到这一点?(在 Mac OS X 10.9 上使用 bash)
答案1
tar cCf /source/path - --exclude "*.java" . | tar xCf /target/path -
答案2
rsync -a --exclude='*.java' src/ work/
答案3
你可以使用{}
多次。所以:
find src -type f ! -iname '*.java' -exec cp {} work/{} \;
将尝试保留路径(并失败,因为目录可能不存在。 - 但是你可能这样做:
-exec mkdir -p `dirname {}` \;
然而,就你所做的而言,你大概想要使用 tar:
find src -type f ! -iname '*.java' | xargs tar cvf - | ( cd work && tar xvf - )