Bash 更改文件名并将其移动到同名文件夹

Bash 更改文件名并将其移动到同名文件夹,bash,file,directory,Bash,File,Directory,我试图保持一些媒体文件的组织-从命名约定到文件夹层次结构。这些文件保存在服务器上,因此最好以cron的形式运行。主要问题是,根据拍摄者的不同,一些图像的命名不恰当 我当前拥有的文件夹结构是: Landscapes (2012) Buildings (2013) Contemporary Designs (2014) etc. 文件保存为: Landscapes 010 (2012).jpg # correct Landscapes 011 (20

我试图保持一些媒体文件的组织-从命名约定到文件夹层次结构。这些文件保存在服务器上,因此最好以cron的形式运行。主要问题是,根据拍摄者的不同,一些图像的命名不恰当

我当前拥有的文件夹结构是:

    Landscapes (2012)
    Buildings (2013)
    Contemporary Designs (2014)
    etc.
文件保存为:

    Landscapes 010 (2012).jpg # correct
    Landscapes 011 (2012).jpg # correct
    Landscapes (2012) 012 (Regional_Airport).jpg #sometimes happens and need to delete the (Regional_Airport)
  • 我希望对文件名进行修剪,以保留名称日期和顺序#(无论位置如何)*希望将它们保持在相同的顺序,例如(区域#机场)将被删除,并将012放在(2012)前面
  • 将文件移动到具有相同名称和年份的文件夹中
我的脚本编写能力相当有限,但在处理Hazel时发现了这一点(这是一个有限的选项,因为我的电脑不会整天都开着)

#/bin/bash
RootFolder=/Volumes/image\u存储
#仅在新行上拆分
OLDIFS=“$IFS”#保存它
如果=“
"
file=“$1”
对于$(ls-1$RootFolder/)中的文件夹;做
ufolder=`echo$folder | tr“[:上限:”“[:下限:”`
ufile=`echo$file | tr“[:上限:”“[:下限:”`

如果grep-q$ufolder-Well-您可以使用类似于
\w+\d{3,}\(\d{4}\).jpg的正则表达式来检查您的姓名是否为指定格式。但是关于修复它们,你需要做很多假设。。例如,如果索引号是2009年,但年份是2010年,而人类在相反的位置输入它们-你怎么知道?这里没有全面的解决方案。任何脚本都必须对文件的命名方式做出一些假设,因为没有任何东西可以阻止用户命名文件
foobarbaz.xyz.jpg
或任何数量的其他无用和不正确的名称。在这种情况下,没有人为干预就不可能恢复。不过,我想这对你来说并不是什么新闻。因此,您最好使用一组正则表达式来捕获最常见的命名错误,尽管problemPotato指出,即使文件与正则表达式匹配,也可能会得到不好的结果。你们都是对的。我如何在正则表达式中处理两个最常见的问题(马铃薯-你正在做某事),\w+\d{3,}(\d{4}).jpg和\w+(\d{4})+d{3,}.jpg。谢谢