在整个目录和子目录中递归地重命名文件名的一部分

Rename a portion of a filename recursively throughout directory and sub directory

如何让这个命令在整个子目录中都执行?

for filename in *foo*; do mv "$filename" "${filename//foo/bar}"; done

可能您只想重命名文件名(最后一个路径名部分),而不是中间子目录名。然后可以使用 bash.

globstar 功能来完成此任务
#!/bin/bash

shopt -s globstar
for pathname in ./**/*foo*; do
    [[ -f $pathname ]] || continue
    basename=${pathname##*/}
    mv "$pathname" "${pathname%/*}/${basename//foo/bar}"
done