linux 如何只复制名称相同但数据不同的新文件?

monwx1rj  于 2023-05-06  发布在  Linux
关注(0)|答案(1)|浏览(165)

对于上下文,我有一个相机,它可以拍照,并给他们的文件名DSC_xxxx.JPG。所以,几百张照片后,我会将照片导出到笔记本电脑,然后重新格式化存储卡。问题是这会重置相机的计数器,所以我拍的下一张照片将是DSC_0001.JPG。这是一个不同的图片从DSC_0001.JPG,我已经导出了我的笔记本电脑。
我没意识到这点。下一次我在笔记本电脑上导出照片时,我使用了命令cp -R -u -p /camera/source /laptop/backup,它覆盖了所有的旧文件。幸好我有一个备份,但现在我想知道如何继续。
存储卡没有太多的内存,所以我不能不重新格式化卡每隔一段时间。有没有一个命令,只复制新文件,也许重命名文件相同的名称,但不同的数据?或者我应该换个方式来处理?

goqiplq2

goqiplq21#

这是我的尼康D90:
适应您的需求,更好地安装fdupes

#!/bin/bash

set -e
shopt -s globstar

cd ~/Nikon_D90
mkdir -p temp
cd temp
gphoto2 --get-all-files --skip-existing
for file in DSC_*; do
    new=$(stat -c '%y' $file | sed 's/\s/_/; s/\..*//')
    # test for yyyy-mm-dd_HH:MM:SS.N where N is the Nth image at this second
    for i in {10..0}; do
        if [[ -s ../$new.$i ]]; then
            break
        fi
    done
    if ((i!=0)); then
        new+=.$((i+1))
    fi
    sha1_existing=$(sha1sum $new.$i | awk '{print $1}')
    sha1_newfile=$(sha1sum $file | awk '{print $1}')
    if [[ $sha1_existing != $sha1_newfile ]]; then
        echo mv "$file" "${new}.jpg"
    fi
done

# test for dupes
fdupes=$(fdupes ../**/*/)
if [[ $fdupes ]]; then
    echo $fdupes
    exit 1
fi
rmdir temp
echo 'cd ~/Nikon_D90: ls -l'

如果您对重命名的假输出满意,请将echo mv替换为mv

这个重命名文件喜欢DSC_0747.JPG与 * 创建日期*,像这样:

2021-03-27_16:57:08.jpg
2021-03-27_16:57:58.jpg
2021-03-27_16:58:00.jpg

如果您在同一秒中有多个版本:

2021-03-27_16:58:00.jpg
2021-03-27_16:58:00.1.jpg
2021-03-27_16:58:00.2.jpg

相关问题