写时复制,减少冗余数据

写时复制,减少冗余数据

我有一个包含很多图片的文件夹和一个用于更新其中一些图片的程序。

我想创建一个包含旧图片副本的新文件夹并在其上运行该程序,但我想节省硬盘空间,所以我不想复制所有未更改的图片。

答案1

程序是否只是覆盖修改后的图片,还是创建一个新文件并删除旧文件?如果是后者,您可以使用 创建工作目录cp -dRl origdir workdir,这将创建硬链接而不是新副本。(或者cp -dRs如果您更喜欢使用符号链接而不是硬链接。)

答案2

我会利用/tmp并编写一个 shell 脚本将每张图片复制到那里然后进行处理。如果图片处理成功,则将其移至其他地方,如果不成功,则将其删除。一次处理一张图片。

例如

#!/bin/bash

for f in *
do
     cp "$f" /tmp
     /path/to/yourprogram "/tmp/$f"
     # check if picture was processed correctly, possibly via exit code ($?)
     if [ $? -eq 0 ]
     then
           mv "/tmp/$f" /some/other/location
     else
           rm "/tmp/$f"
     fi
done

剥猫皮的方法有很多种,可以根据自己的需要进行修改。

相关内容