我想知道如何在不覆盖旧文件的情况下复制文件,我没有可用的-n开关。
据我所知,cp -u和rsync都会覆盖较旧的文件,我不希望出现这种行为,我希望始终保留较旧的文件。
谢谢
发布于 2013-07-13 00:35:59
您可以使用"--interactive“选项(来自GNU coreutils 6.12的”我的cp“中的)在覆盖之前提示您,并使用默认值填充它:
echo 'n' | cp --interactive ~/somefile.txt ~/somefile_already_exists.txt发布于 2013-07-13 01:01:51
将文件复制到同一目录下新创建的临时文件中(参见Linux下的mktemp或tempfile )。然后使用ln尝试为副本指定所需的名称。如果该名称存在,则ln将失败;您可以尝试使用其他名称,或者只是发出一条错误消息,或者诸如此类。最后,删除临时名称。
发布于 2013-07-13 00:36:53
这是一种非交互式方法。它检查文件是否存在(在最初追加随机数之后)。如果是,那么它会寻找另一个随机数。这可以用不同的方式修改。可以添加参数,等等。
copyfile() {
n=$RANDOM
while [ -f $1__$n ]
do
n=$RANDOM
done
cp $1 $1__$n
}用法:
copyfile file_to_copy您的文件将命名为类似如下的名称:
Originalfile.txt_20625
附加的数字最有可能防止任何覆盖的机会。如果这还不够,那么可以在文件的末尾添加任何他们想要的东西,比如时间戳。如果在采取这些措施后,您仍然担心覆盖,那么您可能应该定期备份您的文件。
https://stackoverflow.com/questions/17619678
复制相似问题