在OSX 10.8上,如何通过从名称中删除一定数量的字符来重命名当前目录中的所有文件?例如:
my_img_1@2x.png to become my_img_1.png
因此只会移除@2x
部分。
答案 0 :(得分:3)
执行此操作的确切方法取决于您的文件 - 例如,它们是否都是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}
意味着&#34;取$var
并从其末尾删除与[pattern]匹配的最短字符串&#34;。因此,在这种情况下,${f%@*}
表示&#34;从@
&#34;删除最后$f
及其后的任何内容。然后我们附加.png
来替换已作为该操作的一部分被删除的文件扩展名。
$f = filename@2x.png
${f%@*} = filename
${f%@*}.png = filename.png