我正在尝试创建一个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脚本,因为我还是很新。我真的很感激任何帮助。谢谢!
答案 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)$"