删除同名文件

删除同名文件

我已经离开脚本很多年了,所以我想知道是否有人可以在下面提供帮助。

我正在从 Google Photos 迁移到 Amazon Photos(大约 40k 张照片)。以下是我从 Google 下载的示例:

IMG-20180601-WA0004-modifié.jpg
IMG-20180601-WA0004.jpg
IMG-20180601-WA0004.jpg.json
IMG-20180601-WA0005-modifié.jpg
IMG-20180601-WA0005.jpg
IMG-20180601-WA0005.jpg.json
IMG-20180601-WA0008-modifié.jpg
IMG-20180601-WA0008.jpg
IMG-20180601-WA0008.jpg.json
IMG-20180601-WA0009-modifié.jpg
IMG-20180601-WA0009.jpg
IMG-20180601-WA0009.jpg.json
IMG-20180601-WA0010-modifié.jpg
IMG-20180601-WA0010.jpg
IMG-20180601-WA0010.jpg.json
IMG-20180601-WA0011-modifié.jpg
IMG-20180601-WA0011.jpg
IMG-20180601-WA0011.jpg.json
IMG-20180601-WA0013-modifié.jpg
IMG-20180601-WA0013.jpg
IMG-20180601-WA0013.jpg.json
IMG-20180601-WA0014-modifié.jpg
IMG-20180601-WA0014.jpg
IMG-20180601-WA0014.jpg.json
IMG-20180601-WA0015-modifié.jpg
IMG-20180601-WA0015.jpg
IMG-20180601-WA0015.jpg.json
IMG-20180601-WA0020.jpg
IMG-20180601-WA0020.jpg.json
IMG-20180601-WA0036-modifié.jpg
IMG-20180601-WA0036.jpg
IMG-20180601-WA0036.jpg.json
VID-20180601-WA0012.mp4.json
VID_20180601_195857.mp4.json
métadonnées.json

我想要以下内容:

  1. 搜索下载照片的主文件夹内的所有目录,
  2. 删除所有视频文件,如 mov、mp4、mpeg、mpg、avi、m4v 和 wmv(请注意,有时文件扩展名是大写的)
  3. 对于照片,您会注意到大多数文件名都是重复的(一个没有“modifié”一词,另一个则带有)。请注意,并非所有文件都有“修改”版本,例如 IMG-20180601-WA0020.jpg。我想删除文件名不包含“modifié”一词的所有照片,除非原始文件没有“modifié”版本,然后保留它(IMG-20180601-WA0020.jpg 是一个要保留的示例)
  4. 我更喜欢保留 json 文件,如果它们与视频文件无关,否则删除它们。

答案1

删除所有视频文件可以通过以下方式完成

find . -type f \( -iname '*.mp4' -o -iname '*.mp4.json' \) -delete

-o -iname '*.suffix'为您需要的其他后缀添加更多部分。


要删除原始图片以进行修改,请运行类似的命令

find . -name '*-modifié.jpg' -exec sh -c 'rm -f $(echo "$1" | sed s/-modifié//)' _ {} \;

这将找到任何带有未修改版本的文件-modifié并删除其未修改版本(rm -f如果没有未修改版本,则抑制错误消息)。

PS:我强烈建议在修改/运行这些命令之前进行备份,以防出现问题。

答案2

zsh

zmodload zsh/files # for a builtin rm to avoid the "too many args" limit
                   # of the system one

set -o nocaseglob

echo rm -f -- **/*.(mp4|mpeg|mpg|mov|wmv|avi|m4v)(|.json)(N.)

echo rm -f -- **/*-modifié.jpg(N.e['reply=( ${REPLY%-*}.jpg(|.json)(N.) )'])

删除echos 即可实际执行此操作。

相关内容