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

And*_*son 5 shell-script macos

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

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

Kus*_*nda 7

假设所有图片都在images目录中并且有.jpg后缀,下面这个小脚本会打印出所有.tif在UNIX上没有对应文件的图片文件:

#!/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
Run Code Online (Sandbox Code Playgroud)

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

??? find-images
??? images/
    ??? 1.jpg
    ??? 2.jpg
    ??? ...
Run Code Online (Sandbox Code Playgroud)

现在,打开Utilities/Terminal.app,并使用cd命令导航到您的脚本所在的文件夹,例如,如果脚本在您的桌面上,只需输入cd Desktop

然后,输入chmod +x find-images。现在您只需调用./find-images.


Sam*_*uel 6

我将使用 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
Run Code Online (Sandbox Code Playgroud)

然后,将此脚本保存到一个文件中,位于您硬盘上的某个位置,名称可能为find-images.

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

  • 您需要先去除文件扩展名,否则 * 无 * 文件将匹配。我猜`[item.rsplit(".", 1)[0] for item in os.listdir(jpgPath)]`... (3认同)

小智 3

Perl 一行:

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

63个字符:

find . -name '*.jpg'|perl -pnle 's/.jpg//;-f "$_.tif"||"$_.jpg"' 
Run Code Online (Sandbox Code Playgroud)