我正在运行macOS并寻找一种快速排序数千个jpg文件的方法。我需要根据部分文件名创建文件夹,然后将这些文件移入其中。
简单地说,我想放这些文件:
x
y
进入这些文件夹:
{{1}}
请记住,名称的“x”和“y”部分的长度可能不同。
maxOS中是否有自动解决方案? 我尝试过使用Automator和终端,但我不是程序员,所以我做得不好。
答案 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