在 OS X 或 shell 中查找所有不存在 filename.ext2 的 filename.ext1

在 OS X 或 shell 中查找所有不存在 filename.ext2 的 filename.ext1

我需要为大量图像创建 TIF 和 JPG 版本。

所有 JPG 图像都已存在,但只有部分 TIF 图像。有没有一种简单的方法可以搜索目录以查找所有没有对应 TIF 文件(即具有相同名称但文件扩展名不同的文件)的 JPG 文件?

答案1

Perl 单行代码:

find . -name '*.jpg'|perl -nle 's/\.jpg//;unless(-f "$_.tif"){print "$_.jpg"}' 

63 个字符内:

find . -name '*.jpg'|perl -pnle 's/.jpg//;-f "$_.tif"||"$_.jpg"' 

答案2

假设所有图像都在images目录中且具有后缀,则以下小脚本将打印出所有在 UNIX 上.jpg没有对应文件的图像文件:.tif

#!/bin/sh

find images/ -type f -name "*.jpg" |
while read j; do
  t=${j%.jpg}.tif
  if [ ! -f "$t" ]; then
    echo "Lacking tif file: " $j
  fi
done

将其粘贴到文件中,并将其保存在存储图像的文件夹上方的文件夹中。您可以将其命名为find-images。例如:

├── find-images
└── images/
    ├── 1.jpg
    └── 2.jpg
    └── ...

现在,打开实用程序/Terminal.app,然后使用cd命令导航到脚本所在的文件夹,例如,如果脚本位于桌面上,只需输入cd Desktop

然后输入chmod +x find-images。现在您只需调用 即可运行该脚本./find-images

答案3

我将使用 Python,因为它是跨平台的。首先将您的 jpg 和 tif 文件放在单独的文件夹中。

import os

jpgPath = "path/to/jpgs/folder"
tifPath = "path/to/tifs/folder"

jpgList = [item.rsplit(".", 1)[0] for item in os.listdir(jpgPath)]
tifList = [item.rsplit(".", 1)[0] for item in os.listdir(tifPath)]

diffList = [item for item in jpgList if item not in tifList]

print diffList

然后,将该脚本保存到硬盘上某个文件中,可能名为find-images

现在,打开实用程序/Terminal.app,然后输入python /path/to/file。例如,如果您将其保存在桌面上,它将是python ~/Desktop/find-images(因为是~您的主文件夹的快捷方式)。在这里,您可以运行更详细的解释在 Mac 上运行 Python 文件。

答案4

差异

#!/bin/bash

found1=$(find "$PWD" -name "*.$1")
found2=$(find "$PWD" -name "*.$2")
export IFS=$'\n'
for f1 in "$found1"; do
    base1=${f1##/}
    for f2 in "$found2"; do
        base2=${f2##/}
        [[ ${base1%.$1} == ${base2%.$2} ]] && continue 2
    done
    echo "$f1"
done
  • 用法:cd somedir; diffext jpg tif
  • 在当前目录的子目录中递归搜索
    • 将文件视为重复文件,即使它们位于不同的目录中

相关内容