【问题标题】:mac OS – Creating folders based on part of a filenamemac OS – 基于文件名的一部分创建文件夹
【发布时间】:2017-01-17 00:13:32
【问题描述】:

我正在运行 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,但我不是程序员,所以我做得不好。

【问题讨论】:

    标签: macos


    【解决方案1】:

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

    brew install rename
    

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

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

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

    让我们看看那个命令。

    • --dry-run 的意思是说命令会做什么而不实际做任何事情

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

    • 的|...|'我一会儿解释一下

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

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

    【讨论】:

    • 嘿!您的解决方案也可以,但是@l'L'l 的解决方案不需要额外的“软件”安装。非常感谢您,先生!
    • @MarkSetchell:?
    【解决方案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}
    

    单词被扩展以产生一个模式,就像在文件名扩展中一样。如果模式匹配扩展的尾随部分 参数的值,那么展开的结果就是 具有最短匹配模式的参数(“%”案例)或 最长匹配模式(“%%”案例)已删除。

    ↳ GNU Bash:Shell Parameter Expansion

    【讨论】:

    • 像魅力一样工作!既然你为我节省了重命名的时间,我拥有你一杯啤酒。非常感谢您,先生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2015-07-25
    • 2020-04-14
    • 2019-10-25
    • 2011-04-05
    • 1970-01-01
    • 2018-09-26
    相关资源
    最近更新 更多