Macos mac OS– ;基于文件名的一部分创建文件夹

Macos mac OS– ;基于文件名的一部分创建文件夹,macos,Macos,我正在运行macOS并寻找一种快速排序数千个jpg文件的方法。我需要根据部分文件名创建文件夹,然后将这些文件移动到其中 简单地说,我想把这些文件: x_not_relevant_part_of_name.jpg x_not_relevant_part_of_name.jpg y_not_relevant_part_of_name.jpg y_not_relevant_part_of_name.jpg 进入以下文件夹: x y 请记住,名称的“x”和“y”部分的长度可能不同 在maxOS中是

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

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

x_not_relevant_part_of_name.jpg
x_not_relevant_part_of_name.jpg

y_not_relevant_part_of_name.jpg
y_not_relevant_part_of_name.jpg
进入以下文件夹:

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

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

在Terminal中使用
find
和bash参数替换可能会起作用:

find . -type f -name "*jpg" -maxdepth 1 -exec bash -c 'mkdir -p "${0%%_*}"' {} \; \
-exec bash -c 'mv "$0" "${0%%_*}"' {} \;
这使用bash参数替换和
find
递归创建目录(如果它们不存在),使用与
jpg
匹配的任何文件名的前缀。它将在第一个下划线(
\uu
)之前输入字符,然后将匹配的文件移动到相应的目录中。只需将命令
cd
放入要组织的目录即可。请记住,如果不使用
maxdepth
选项,多次运行该命令可以生成更多文件夹;使用
maxdepth
选项限制命令可以操作的“深度”

${parameter%word}
${parameter%%word}
这个词被展开以产生一个模式,就像在文件名展开中一样。如果模式与展开的 参数的值,则展开的结果是 参数具有最短的匹配模式(“%”大小写)或 已删除最长匹配模式(“%”大小写)


↳ GNUBash:

我会先将文件备份到安全的地方,以防出现问题。然后我将安装,然后用以下命令安装
重命名

brew install rename
然后你可以用这个做你想做的事:

rename --dry-run -p 's|(^[^_]*)|$1/$1|' *.jpg
如果看起来正确,请删除
--干运行
,然后再次运行

让我们看看这个命令

  • --干运行意味着只说命令将做什么,而不实际做任何事情

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

  • “是……”我马上解释

  • *.jpg表示在所有jpg文件上运行该命令


单引号中有趣的一点实际上是一种替换,最简单的形式是
s | a | b |
,意思是用
b
替换
a
。在这种特殊情况下,
a
是插入符号(
^
),表示文件名的开头,然后
[^\u]*
表示非下划线的任意数量的内容。因为我已经用括号括起来了,所以我可以在
b
部分将其称为
$1
,因为它是
a
中括号中的第一个东西。
b
部分的意思是“下划线之前的内容”后跟斜杠和“下划线之前的内容”。

就像一个符咒!既然你帮我省了几个小时的改名时间,我就给你一杯啤酒。非常感谢,先生。嘿!您的解决方案也可以工作,但是@l'l'l的解决方案不需要额外的“软件”安装。非常感谢,先生@马克塞切尔: