Bash脚本;使用find和sed将另一个字符串替换为filename中的某些字符串

时间:2016-01-25 06:58:46

标签: bash

我正在尝试创建一个bash脚本,使用find命令和sed命令将filename中的某些字符串替换为另一个字符串。

我想拿两个论点;首先是变量OLD,我在文件名中查找的字符串(字符串也可能包含空格),第二个是变量NEW,我想要将其更改为的字符串。

我想在文件名中找到包含OLD的所有文件,并在当前目录和所有子目录中以.jpg或.png结尾,并使用NEW更改OLD部分。

#! /bin/bash

OLD="${1}"
NEW="${2}"

# maybe..?
for file in `find . -name "*$OLD*\.(jpg|png)"`; do
   # ...
done

# or this..?
find . -name "*$OLD*\.(jpg|png)" | sed -E "s/$OLD/$NEW/"
# ...

我写了一些东西,但它们可能没有任何意义,我真的很困惑bash脚本,因为我还是很新。我真的很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

我只是这样做,只要你在$OLD$NEW中没有任何特殊字符:

for file in $(find -E . -regex ".*$OLD.*\.(jpg|png)$")
do
  echo ${file/$OLD/$NEW}
done

编辑:似乎find -E是一个扩展名。

find . -regextype posix-extended -regex ".*$OLD.*\.(jpg|png)$"