同步两个目录:相同的文件名、不同的文件结尾、不同的文件内容

同步两个目录:相同的文件名、不同的文件结尾、不同的文件内容

我有 2 个带有子目录的文件夹。一张带有训练图像,一张带有训练标签。

  • 一张图像恰好属于一个标签
  • 图片和标签内容不同
  • 图像和标签可以在类似的路径中找到。例如:
    • 图片/18/1334/图像1。网页文件
    • 标签/18/1334/图像1。PNG
  • 文件名(不是扩展名)相同
  • 一个子目录下可以有多个文件

如何删除每个没有相应图像的标签(反之亦然)?例如:

图片:

.
|---18
     |---a1
     |    |---a1.webp
     |    |---a11.webp
     |---a2
     |    |---a2.webp
     |---a3

标签

.
|---18
     |---a1
     |    |---a1.png
     |    |---a11.png
     |---a2
     |    |---a2.png
     |---a3
          |---a3.png  

好的解决方案(如果没有相应的标签或图像,则删除文件):

.
|---18
     |---a1
     |    |---a1.*
     |    |---a11.*
     |---a2
     |    |---a2.*
     |---a3

最佳解决方案(也删除现在为空的文件夹):

.
|---18
     |---a1
     |    |---a1.*
     |    |---a11.*
     |---a2
          |---a2.*

星号* 代表 webp 或 png。

答案1

findbash

cd到 and 的父目录imageslabels运行:

find . \( -name "*.webp" -o -name "*.png" \) -type f -exec bash -c '
if [ "${1##*.}" = "webp" ]; then
  file=${1/\/images\//\/labels\/} 
  file=${file%webp}png
else
  file=${1/\/labels\//\/images\/}
  file=${file%png}webp
fi
[ ! -f "$file" ] && echo rm "{}"
' bash {} \;

您需要删除echo才能真正删除文件。

要删除空目录,请参阅如何删除子树中的所有空目录?

相关内容