我想将我今天创建/编辑的文件复制到一个单独的目录“changeset”中,同时保持其目录结构
我想出了以下脚本
cd ./myproject/
find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \;
上述缺点是没有创建目录,副本会抛出错误。
我手动进入../changeset/并创建文件夹结构,直到命令运行没有错误..但这有点单调乏味。
这有一个简单的解决方案吗?
答案 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 {} \;