1

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

我想出了以下脚本

cd ./myproject/

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

上面的缺点是没有创建目录并且复制会引发错误。

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

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

4

2 回答 2

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

cpio 是一个古老的、古怪的归档程序,它有时是完成这项工作的最佳工具。使用-p它将 stdin 上命名的文件复制到另一个目录。使用-d它根据需要创建目录。

于 2012-12-20T01:43:30.337 回答
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 {} \;
于 2013-02-28T07:32:11.740 回答