击:复制递归命名文件,保存文件夹结构(Bash: Copy named files recursiv

2019-09-02 16:12发布

我希望:

cp -R src/prog.js images/icon.jpg /tmp/package

将产生在目标目录对称的结构:

/tmp
|
+-- package
    |
    +-- src
    |   |
    |   +-- prog.js
    |
    +-- images
        |
        +-- icon.jpg

而是,这两个文件复制到/ tmp目录/包。 平面复制。 (这是在OSX)。

有一个简单的bash功能我可以用它来复制所有文件,包括通过通配符指定的文件(例如SRC / *。JS)到目标目录中应有的地位。 有点像“每个文件,运行mkdir -p $(dirname "$file"); cp "$file" $(dirname "$file") ”,但也许一个命令。

这是一个相关的线程,这表明这是不可能的。 笔者的解决方案是不是对我非常有用,但因为我想简单地提供文件,通配符与否的名单,并有所有的人都复制到目标目录。 IIRC MS-DOS XCOPY做到这一点,但似乎没有类似的CP。

Answer 1:

您是否尝试过使用--parents选项? 我不知道,如果OS X支持,但在Linux上工作。

cp --parents src/prog.js images/icon.jpg /tmp/package

如果没有在OS X上工作,尝试

rsync -R src/prog.js images/icon.jpg /tmp/package

作为AIF建议。



Answer 2:

单程:

tar cf - <files> | (cd /dest; tar xf -)


Answer 3:

另外,如果你是老派的,使用的cpio:

cd /source;
find . -print | cpio -pvdmB /target

显然,可以过滤文件列表到你的心脏的内容。

的“-p”选项是关于“直通”模式(如针对“-i”的输入或“-o”的输出)。 在“-v”是详细(列出的文件,因为它们可以处理)。 在“-m”保存修改时间。 在“-B”手段使用“大块”(其中大块是5120个字节,而不是512个字节); 有可能它没有任何效果,这些天。



Answer 4:

rsync的的-R选项会做你的期望。 这是一个非常丰富的功能,文件复印机。 例如:

$ rsync -Rv src/prog.js images/icon.jpg /tmp/package/
images/
images/icon.jpg
src/
src/prog.js

sent 197 bytes  received 76 bytes  546.00 bytes/sec
total size is 0  speedup is 0.00

示例结果:

$ find /tmp/package
/tmp/package
/tmp/package/images
/tmp/package/images/icon.jpg
/tmp/package/src
/tmp/package/src/prog.js


Answer 5:

当然,rsync的! 教程在这里。 和这里

或齐声



Answer 6:

尝试...

for f in src/*.js; do cp $f /tmp/package/$f; done

这样对你最初做什么?

for f in `echo "src/prog.js images/icon.jpg"`; do cp $f /tmp/package/$f; done

要么

v="src/prog.js images/icon.jpg"; for f in $v; do cp $f /tmp/package/$f; done


文章来源: Bash: Copy named files recursively, preserving folder structure
标签: bash shell