Bash脚本检查具有特定扩展名的文件

Bash脚本检查具有特定扩展名的文件,bash,shell,Bash,Shell,我正在尝试构建一个.sh脚本来帮助我清除一个巨大的库文件夹。这是我第一次使用bash脚本,但它运行得不太正常 文件夹结构为: gallery/ gallery1/ dynamic/ thumbs/ oldfile.jpg_backup oldfile.jpg gallery2/ dynamic/ thumbs/ oldfile.jpg_backup ol

我正在尝试构建一个.sh脚本来帮助我清除一个巨大的库文件夹。这是我第一次使用bash脚本,但它运行得不太正常

文件夹结构为:

gallery/
    gallery1/
        dynamic/
        thumbs/
        oldfile.jpg_backup
        oldfile.jpg
    gallery2/
        dynamic/
        thumbs/
        oldfile.jpg_backup
        oldfile.jpg
。。等等

这就是它的工作原理:

  • 将在名为“gallery”的主文件夹中运行
  • 进入每个文件夹(gallery1、gallery2等)
  • 检查子文件夹是否包含另一个名为thumbs或dynamic的子文件夹,如果是,则应将其删除
  • 检查文件夹中是否有扩展名为“.jpg_backup”的文件
  • 如果是,则删除所有常规.jpg文件
  • 它将als.jpg_备份重命名为.jpgs
  • 我试过这样做,但我挂在“if[DIRECTORY]”线上。这是珀利编造的,因为我不知道怎么做那部分。非常感谢您的帮助

    for f in ~/gallery/*;
        do
    
        [ -d /thumbs ] && rm -r thumbs/ && echo Thumbs deleted...
    
        [ -d /dynamic ] && rm -r dynamic/ && echo Dynamic deleted...
    
    
        if [ DIRECTORY == "*.jpg_backup" ]
            then 
                rm *.jpg
                rename 's/.jpg_backup/.jpg/' *
        fi
    
        done;
    
    #/usr/bin/env bash
    set-o errexit
    set-o xtrace
    对于画廊中的d/*;做
    rm-vrf“$d/拇指”“$d/动态”
    if[-n“$(shopt-s nullglob;echo$d/*.jpg_备份)”];然后
    rm-rf“$d”/*.jpg
    对于“$d”/*.jpg_备份中的f;做
    mv-v“$f”“${f%\u backup}”
    完成
    fi
    完成
    
    参考资料:

    • nullglob:
    • 在bash中剥离后缀(jpg_backup->jpg):

    您没有使用循环中的
    $f
    变量来处理每次迭代中的文件和子目录

    for f in ~/gallery/*;
    do
        [ -d "$f/thumbs" ] && rm -r "$f/thumbs" && echo "$f/dynamic" deleted...
        [ -d "$f/dynamic" ] && rm -r "$f/dynamic" && echo "$f/dynamic" deleted...
        if compgen -G "$f/*.jpg_backup" >/dev/null
        then 
            rm "$f"/*.jpg
            rename 's/.jpg_backup/.jpg/' "$f"/*.jpg_backup
        fi
    done;
    
    我在中找到了
    compgen
    命令

    但所有这些循环似乎都没有必要。您只需执行以下操作:

    rm -rf ~/gallery/*/{thumbs,dynamic}
    rename -f 's/.jpg_backup/.jpg/' ~/gallery/*/*.jpg_backup
    

    重命名的
    -f
    选项告诉它允许替换现有文件,因此不需要使用
    rm
    命令。

    Cool nice脚本。但在该脚本中没有
    cd$f
    。如果[DIRECTORY==“*.jpg\u backup”]
    行应该做什么?它应该执行步骤
    4
    ?有帮助吗<代码>如果ls“$f”/*.jpg_backup>/dev/null 2>/dev/null?
    [-d/thumbs
    检查
    /
    dire中的
    thumbs
    目录和
    rm-r thumbs/
    删除当前工作目录中的thumbs目录,这些都不相关…非常感谢,但出于某些原因,它没有执行任何操作,甚至没有输出错误..将
    设置-x
    放在脚本开头以查看thumbs目录的跟踪e执行。