Zel*_*luX 16 linux command-line-interface copy
我想将 svn 存储库中修改过的文件复制到另一个目录,同时保留它们的目录结构。
阅读 awk 和 xargs 联机帮助页后,我找到了一种方法来更改文件名,如下所示:
$ svn status -q | awk '{ print $2 }' | xargs -d \\n -I '{}' cp '{}' /tmp/xen/
Run Code Online (Sandbox Code Playgroud)
但问题是,以这种方式不保留目录结构,我想复制这样的文件:
./common/superp.c -> /tmp/xen/common/superp.c
./common/m2mgr.c -> /tmp/xen/common/m2mgr.c
./common/page_alloc.c -> /tmp/xen/common/page_alloc.c
./arch/x86/mm.c -> /tmp/xen/arch/x86/mm.c
./arch/x86/mm/shadow/private.h -> /tmp/xen/arch/x86/mm/shadow/private.h
Run Code Online (Sandbox Code Playgroud)
我试图将 cp 命令更改为cp '{}' /tmp/xen/'{}'但它说没有这样的文件或目录。如果需要,有没有办法制作cp复制文件并创建目录?并请指出是否可以简化此命令链。:-)
感谢你的回复。由于目录有点大,我不想使用cp -R或rsync复制整个目录。CK 使用 tar 管道的建议非常有用。
svn status -q | awk '{ print $2 }' | xargs tar cf - | (cd /tmp/xen/; tar xvf -)
Run Code Online (Sandbox Code Playgroud)
CK.*_*CK. 12
几个快速的想法:
编辑
tar -cf archive.tar `svn status -q | awk '{print $2}'`
Run Code Online (Sandbox Code Playgroud)
应该创建修改文件的存档。然后:
tar -xf archive.tar -C /tmp/xen
Run Code Online (Sandbox Code Playgroud)
应该把它放在你想要的地方。如果它需要一步,那也是可能的。
rsync 非常简单,它是我通常用于复制整个目录结构的工具:
rsync -av /home/source/svn/repo /home/dest/svn/
Run Code Online (Sandbox Code Playgroud)
这将在 /home/dest/svn 目录中创建 repo 目录及其所有内容,因此您将拥有 /home/dest/svn/repo/...
所以你的例子:
rsync -rv ./ /tmp/xen/
Run Code Online (Sandbox Code Playgroud)
-a,将保留时间戳并在其他内容中递归,'man rsync'。
意识到我读错了问题后更新:
模仿目录结构(tar 替代):
rsync -av --include='*/' --exclude='*' source destination
Run Code Online (Sandbox Code Playgroud)
然后在 20 分钟前复制文件:
find . -type f -mmin -20 -print0 | xargs -0 cp --target-directory /mydestdir/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58633 次 |
| 最近记录: |