我在源文件夹中有一堆文件需要更新到目标文件夹。源文件夹中的布局是平坦的,没有子目录,例如:
src\a.h
\a.c
\b.h
\b.c
\c.h
\c.c
目标文件夹包含多层深层子目录,例如:
dst\App\a.h
\App\a.c
\USBD\CDC\b.h
\USBD\CDC\b.c
\USBH\CORE\FUNCTION\c.h
\USBH\CORE\FUNCTION\c.h
我需要递归搜索“ dst”目录中的所有文件,如果其中任何一个与“ src”目录中的任何文件匹配,然后将“ dst”中的文件重命名为XX.sav(XX是原始名称)并将其从“ dst”复制到“ src”。
谢谢
假设您实际上要从复制src
到dst
,并且src
和dst
是兄弟姐妹,并且命令是从公共父目录运行的,请尝试:
find dst -type f -exec sh -c 'test -f src/${0##*/} &&
{ mv $0 $0.sav && cp src/${0##*/} $0; }' {} \;
如果最后两个假设不正确,请尝试(未经测试):
find /path/to/dst -type f -exec sh -c 'test -f $1/${0##*/} &&
{ mv $0 $0.sav && cp $1/${0##*/} $0; }' {} /path/to/src \;
您应该小心:如果其中有任何现有.sav
文件,dst
它们可能会被覆盖,并且如果其中有任何.sav
文件,src
则最终可能会与.sav.sav
dst中的.sav
文件重复,而该文件是此命令本身创建的相关文件的副本。使用mv -i
,如果他们是相关的解决这些问题。如果现有文件数量很多,则mv -i
可能不是合适的解决方案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句