Macos mac OS– ;基于文件名的一部分创建文件夹
我正在运行macOS并寻找一种快速排序数千个jpg文件的方法。我需要根据部分文件名创建文件夹,然后将这些文件移动到其中 简单地说,我想把这些文件: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中是
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的解决方案不需要额外的“软件”安装。非常感谢,先生@马克塞切尔: