mac OS - 根据文件名的一部分创建文件夹

时间:2017-01-16 14:01:07

标签: macos multiple-files

我正在运行macOS并寻找一种快速排序数千个jpg文件的方法。我需要根据部分文件名创建文件夹,然后将这些文件移入其中。

简单地说,我想放这些文件:

x
y

进入这些文件夹:

{{1}}

请记住,名称的“x”和“y”部分的长度可能不同。

maxOS中是否有自动解决方案? 我尝试过使用Automator和终端,但我不是程序员,所以我做得不好。

2 个答案:

答案 0 :(得分:4)

我会先将文件备份到安全的地方以防万一出错。然后我会安装homebrew,然后安装rename

brew install rename

然后你就可以做到这一点:

rename --dry-run -p 's|(^[^_]*)|$1/$1|' *.jpg

如果看起来不正确,请删除--dry-run并再次运行。

让我们来看看那个命令。

  • - 干跑意味着只说出命令会做什么而不实际做任何事情

  • -p表示根据需要创建任何中间路径(即目录)

  • 的| ... |'我马上解释一下

  • *。jpg表示对所有JPG文件运行命令。

单引号中的有趣位实际上是替换,最简单的形式是s|a|b|,这意味着用a代替b。在这种特殊情况下,a是插入符号(^),表示文件名的开头,然后[^_]*表示任何数量不是下划线的事物。正如我用括号括起来的那样,我可以在b部分中将其引用回$1,因为它是a中括号中的第一个内容。 b部分表示“在下划线之前的任何内容”后跟斜线和“再次在下划线之前的任何内容”

答案 1 :(得分:2)

在终端中使用find和bash参数替换可能会有效:

find . -type f -name "*jpg" -maxdepth 1 -exec bash -c 'mkdir -p "${0%%_*}"' {} \; \
-exec bash -c 'mv "$0" "${0%%_*}"' {} \;

这使用带有find的bash参数替换来使用匹配jpg的任何文件名的前缀递归创建目录(如果它们尚不存在)。它接受第一个下划线(_)之前的字符,然后将匹配的文件移动到适当的目录中。要将命令cd简单地用到您想要组织的目录中。请记住,如果不使用运行该命令的maxdepth选项,可以多次生成更多文件夹;使用maxdepth选项限制命令可以操作的“深度”。

${parameter%word}
${parameter%%word}
  

这个词被扩展为产生一个模式,就像文件名扩展一样。如果模式匹配展开的尾部   参数的值,那么扩展的结果就是值   具有最短匹配模式的参数('%'大小写)或   最长匹配模式('%%'案例)已删除。

↳GNUBash:Shell Parameter Expansion

相关问题