![将目录结构展平到新目标,从目标中删除过时的文件](https://linux22.com/image/733853/%E5%B0%86%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E5%B1%95%E5%B9%B3%E5%88%B0%E6%96%B0%E7%9B%AE%E6%A0%87%EF%BC%8C%E4%BB%8E%E7%9B%AE%E6%A0%87%E4%B8%AD%E5%88%A0%E9%99%A4%E8%BF%87%E6%97%B6%E7%9A%84%E6%96%87%E4%BB%B6.png)
目录“d1”包含多个子目录,子目录中的文件均以 .bin 结尾
我希望将所有这些.bin 文件复制到“d2”,而不管目录结构(即展平),以便 Web 应用程序更容易找到这些文件。“d2”目录应保持最新,并且不包含旧文件。
我能想到的唯一我真的不喜欢的方法是:
cd /d1
mkdir /d2.new
find . -type f -name "*.bin" -exec cp -f {} /d2.new
rm -rf /d2
mv /d2.new /d2
我发现上述问题在于:
我真的很讨厌在脚本中使用“rm -rf”,觉得如果它可能出错,那它就会出错,并带来灾难性的后果。
在“rm”和“mv”完成之间,“d2”目录不存在,这可能会给需要该目录的服务带来问题。
但是如果没有最后两行,“d2”将包含旧文件,这是我也不想要的。
似乎没有办法强制“mv”将目录重命名为另一个已经存在的目录。
两个目录都在同一台服务器上,因此找到仅在文件不匹配时复制的内容将是一个好处。