如何检测名称相同但扩展名不同的文件?

Rez*_*eza 6 delete directory batch

我有一个目录,其文件的扩展名为 .JPG 或 .NEF,我想删除目录中不存在 X.JPG 格式的 X.NEF 文件。(这里的 X 可以是任何字符串。)除了手动,我不知道如何做到这一点。

更一般的情况是,当您想在目录 A 中查找也存在于目录 B 中的所有文件时。(第一个问题可以使用 转化为第二个问题mmv。)

ste*_*ver 8

您可以使用 shell 的${var%ext}参数替换功能在每个文件的基础上删除原始扩展名:举例说明

touch file{1..6}.NEF file{1,2,4,6}.JPG
Run Code Online (Sandbox Code Playgroud)

然后

for nef in *.NEF; do [[ -f "${nef%.NEF}.JPG" ]] || echo rm -- "$nef"; done
Run Code Online (Sandbox Code Playgroud)

结果是

rm -- file3.NEF
rm -- file5.NEF
Run Code Online (Sandbox Code Playgroud)

解释:

第一个命令只创建 6 个.NEF编号file1.NEF为的文件和其中 3 个的file6.NEF相应.JPG文件,即只是一些空文件来测试第二个命令。