【发布时间】:2018-01-30 13:46:55
【问题描述】:
我有很多名为activity_unpublish_39x39.png、abc_29x29.png 等的文件。
我想把名字转换成activity_unpublish.png(去掉_39x39)
和abc.png(删除_29x29)。
谁能告诉我如何做到这一点?
在 Mac OS X 上工作会更好。
【问题讨论】:
标签: linux shell command-line command
我有很多名为activity_unpublish_39x39.png、abc_29x29.png 等的文件。
我想把名字转换成activity_unpublish.png(去掉_39x39)
和abc.png(删除_29x29)。
谁能告诉我如何做到这一点?
在 Mac OS X 上工作会更好。
【问题讨论】:
标签: linux shell command-line command
以下小 shell 脚本应该可以在 Linux 和 Mac OS 上运行。请注意,它在当前文件夹中工作,您还必须根据您的需要更改 pat 和 suf(此处为 suf="\.png" 和 pat="_[0-9]+x[0-9]+$suf" 以使用您给定的示例)。
它使用sed 和-E,这在manpage 中没有记录。它是 Mac OS 中的选项,在 Linux 中称为-r。在Linux中也存在but as said not documented:
#!/bin/sh
suf="\.png"
pat="_[0-9]+x[0-9]+$suf"
for f in *; do
if [[ $f =~ $pat ]]; then
newName=$(echo "$f" | sed -E "s/$pat/$suf/g")
mv "$f" "$newName"
fi
done
【讨论】:
我从好心的同事那里得到了答案。 使用这个 shell 脚本。
#!/bin/sh
for file in *_[0-9]*x[0-9]*.png
do
mv $file $(echo $file | sed 's/_[0-9]*x[0-9]*//')
done
【讨论】: