如何检查与其他扩展名相同的文件是否在文件夹中

时间:2015-05-05 21:34:56

标签: file shell if-statement video equivalent

我有一个包含大量视频和缩略图的文件夹。在Plex上观看视频后,我在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

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是通过执行此操作的脚本过滤排序列表:

  • 对于每个文件名,复制其名称,修剪后缀
  • 将修剪后的名称与上一行的修剪名称进行比较(忽略第一行的情况)
  • 如果两者相等,则报告两个文件名
  • 保存当前文件名(和修剪过的文件名)以进行下一次比较

这可能有一些重复的行 - 您可以在脚本中处理。但更简单的方法是通过uniq来管道结果。此外,我会将语言环境覆盖到POSIX,以摆脱有时奇怪的整理顺序,它们可以等同于大写/小写(并使比较复杂化)。

在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