我有很多名为activity_unpublish_39x39.png
,abc_29x29.png
等的文件。
我想将名称转换为activity_unpublish.png
(删除_39x39
)
和abc.png
(删除_29x29
)。
有人能告诉我如何实现这一目标吗?
在Mac OS X上工作会更好。
答案 0 :(得分:2)
以下小shell脚本应该可以在Linux上运行,也可以在Mac OS上运行。请注意,它在当前文件夹中工作,您还需要根据需要更改pat
和suf
(此处为suf="\.png"
和pat="_[0-9]+x[0-9]+$suf"
以便与您的例子)。
它使用sed
和-E
-r
,manpage中没有记录。它是Mac OS中的选项,在Linux中称为#!/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
。在Linux中它也存在but as said not documented:
@echo off
setlocal EnableExtensions EnableDelayedExpansion
echo Calling Powershell, wait...
for /F "usebackq tokens=1-4 delims=, " %%1 in (`powershell -Command "write-host $host.ui.rawui.BufferSize,$host.ui.rawui.WindowSize;"`) do set/a bufCols=%%1, bufLines=%%2, winCols=%%3, winLines=%%4
set/a cnt=0, winLines-=1
for /f "tokens=*" %%a in (input.txt) do (
set/a cnt+=1, pauser=cnt%%winLines
echo %%a
if !pauser! equ 0 pause
)
endlocal
exit/B
答案 1 :(得分:0)
我从善良的同事那里得到了答案。 使用这个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