复制更改的文件,创建更改集并维护目录结构

时间:2012-12-20 01:39:44

标签: bash terminal cygwin

我想将我今天创建/编辑的文件复制到一个单独的目录“changeset”中,同时保持其目录结构

我想出了以下脚本

cd ./myproject/

find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \;

上述缺点是没有创建目录,副本会抛出错误。

我手动进入../changeset/并创建文件夹结构,直到命令运行没有错误..但这有点单调乏味。

这有一个简单的解决方案吗?

2 个答案:

答案 0 :(得分:2)

find * -mtime -1 -daystart -print0 | cpio -pd0 ../changeset

cpio是一个古老的,古怪的档案计划,偶尔也是这项工作的最佳工具。使用-p,它将stdin上命名的文件复制到另一个目录。使用-d,它会根据需要创建目录。

答案 1 :(得分:0)

我找到了另一种解决方案,它不像约翰那样优雅但不依赖于cpio,我没有。

cd ./myproject/

# Create all directories
find ./* -type d -exec mkdir ../changeset/{} \;

# Copy files
find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \;

# Delete empty directories, run this several times because after moving a child the parent directory needs to be removed
find ../changeset/ -type d -empty -exec rmdir {} \;