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

Bash 复制更改的文件,创建更改集并维护目录结构,bash,terminal,cygwin,Bash,Terminal,Cygwin,我只想将我今天创建/编辑的文件复制到一个单独的目录“变更集”,同时保持其目录结构 我想出了下面的剧本 cd ./myproject/ find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \; 上述方法的缺点是没有创建目录,副本会抛出错误 我已手动进入../changeset/并创建文件夹结构,直到命令无误运行。。但这有点乏味 有没有简单的解决办法 find * -mtime -1 -daystart -print0 | cpio

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

我想出了下面的剧本

cd ./myproject/

find ./* -mtime -1 -daystart -exec cp {} ../changeset/{} \;
上述方法的缺点是没有创建目录,副本会抛出错误

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

有没有简单的解决办法

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

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

我找到了另一个解决方案,它不像John的解决方案那样优雅,但不依赖于我没有的
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 {} \;

cp有一个创建家长的标志,我认为它是-p,但不是100%sure@technosaurus这里有
mkdir-p
,但遗憾的是没有
cp
等价物
cp-p
cp——父母存在,但做其他事情。我在Windows上,MingW似乎没有这样的功能:(