我只想将我今天创建/编辑的文件复制到一个单独的目录“变更集”中,同时保持它们的目录结构
我想出了以下脚本
cd ./myproject/
find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \;
上面的缺点是没有创建目录并且复制会引发错误。
我已经手动进入 ../changeset/ 并创建文件夹结构,直到命令运行没有错误..但这有点乏味。
有一个简单的解决方案吗?
find * -mtime -1 -daystart -print0 | cpio -pd0 ../changeset
cpio 是一个古老的、古怪的归档程序,它有时是完成这项工作的最佳工具。使用-p
它将 stdin 上命名的文件复制到另一个目录。使用-d
它根据需要创建目录。
我找到了另一种解决方案,它不像约翰的那样优雅,但不依赖于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 {} \;