Shell从文件名中删除模式

时间:2017-08-22 10:11:31

标签: linux shell command-line command

我有很多名为activity_unpublish_39x39.pngabc_29x29.png等的文件。

我想将名称转换为activity_unpublish.png(删除_39x39) 和abc.png(删除_29x29)。

有人能告诉我如何实现这一目标吗?

在Mac OS X上工作会更好。

2 个答案:

答案 0 :(得分:2)

以下小shell脚本应该可以在Linux上运行,也可以在Mac OS上运行。请注意,它在当前文件夹中工作,您还需要根据需要更改patsuf(此处为suf="\.png"pat="_[0-9]+x[0-9]+$suf"以便与您的例子)。
它使用sed-E -rmanpage中没有记录。它是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