shell 如何检查文件夹中是否存在具有其他扩展名的相同文件

js81xvg6  于 2023-11-21  发布在  Shell
关注(0)|答案(1)|浏览(174)

我有一个文件夹,里面有很多视频和视频的缩略图。在YouTube上观看视频后,我在Web界面上删除了它。所以文件中的缩略图会留在文件夹中。
现在我想写一个程序,删除所有缩略图,如果没有等效的mp4文件。
下面是文件夹“ls”中的一个示例:
PietSmiet - BATTLEFIELD HARDLINE 1920x1080.jpg
PietSmiet - CITIES SKYLINES # 45 1920x1080.jpg
PietSmiet - GTA ONLINE # 89 1920x1080.jpg
PietSmiet - MEIN ARSCH BRICHT AUS 1920x1080.jpg
PietSmiet - MINECRAFT Adventure Map # 92 1920x1080.jpg
PietSmiet - TTT # 171 1920x1080.jpg
PietSmiet - TTT # 171 1920x1080.mp4

iqjalb3h

iqjalb3h1#

解决这个问题的一种方法是通过一个脚本来过滤一个 sorted 列表:

  • 对于每个文件名,复制其名称,去掉后缀
  • 将该修剪名称与前一行中的修剪名称进行比较(忽略第一行的大小写)
  • 如果两者相等,则报告两个文件名
  • 保存当前文件名(和修剪后的文件名),以便下次比较

这可能会有一些重复的行-你可以在脚本中处理。但更简单的是通过uniq管道结果。此外,我会将locale覆盖到POSIX以摆脱有时奇怪的排序序列,这些序列可能等同于upper/upper(并使比较复杂化)。
在POSIX shell中,这将是两个脚本,例如,一个接受包含文件名列表的文件:

#!/bin/sh
unset LANG
unset LC_ALL
unset LC_CTYPE
sort $* | my-filter | uniq

字符串
my-filter脚本:

#!/bin/sh
last_file=
last_trim=
while :
do
    read this_file
    [ -z "$this_file" ] && break
    this_trim=$(echo "$this_file" | sed -e 's/\.[^.]*$//')
    if [ "$this_trim" = "$last_trim" ]
    then
            echo "$last_file"
            echo "$this_file"
    fi
    last_trim="$this_trim"
    last_file="$this_file"
done

相关问题