【发布时间】:2014-04-05 15:43:22
【问题描述】:
在 OSX 10.8 上,如何通过从名称中删除一定数量的字符来重命名当前目录中的所有文件?示例:
my_img_1@2x.png to become my_img_1.png
所以只会删除@2x 部分。
【问题讨论】:
-
解释移除部分的规则。
标签: macos bash command-line
在 OSX 10.8 上,如何通过从名称中删除一定数量的字符来重命名当前目录中的所有文件?示例:
my_img_1@2x.png to become my_img_1.png
所以只会删除@2x 部分。
【问题讨论】:
标签: macos bash command-line
执行此操作的确切方法取决于您的文件 - 例如,它们都是 PNG 文件吗?你想从所有这些中删除@2x 吗?这是一个循环,它将从当前目录中的所有文件中删除文件扩展名之前的 3 个字符:
for f in *; do
echo mv "$f" $(sed -r 's/(.*).{3}\.([^\.]+)/\1.\2/' <<< "$f")
done
如果您的所有文件都命名为[something]@2x.png,并且您希望将它们重命名为[something].png,这将起作用:
for f in *; do
echo mv "$f" "${f%@*}.png"
done
这可以使用parameter expansion - 实际上构造${var%pattern} 意味着“采用$var 并从其末尾删除匹配[pattern] 的最短字符串”。所以在这种情况下,${f%@*} 的意思是“从$f 中删除最后一个@ 以及它之后的任何内容”。然后我们附加.png 来替换作为该操作的一部分被删除的文件扩展名。
$f = filename@2x.png
${f%@*} = filename
${f%@*}.png = filename.png
【讨论】:
@2x。所以最好不要指定每个文件。
for f in * 命令将对当前目录中的所有文件运行。我将添加一个您可以使用的附加命令。