我想[]-_"
从位于不同子目录中的多个文件名中删除“等”。
找到了这个
rename "s/\[|\]/_/g" *
但它只在特定的子目录中起作用,而不适用于其他地方的其他文件
有办法吗?
答案1
如果要将重命名递归应用于当前工作目录下的目录层次结构中的所有文件,可以使用 Bash 的globstar
功能。您需要先激活此功能。输入以下内容:
shopt -s globstar
rename "s/\[|\]/_/g" **
换句话说,你只需激活该功能,然后就可以使用两个星号( )而不是一个星号( )globstar
来运行命令。这将匹配当前工作目录下目录层次结构中的所有文件,即,无论它们在当前工作目录下嵌套的深度如何。**
*
如果你只想重命名所有文件在当前工作目录下,而无需担心重命名匹配的目录名,您可以改用find
:
find . -type f -execdir rename -- 's/\[|\]/_/g' {} +
这将匹配所有文件包含字符[
或]
当前工作目录下的目录结构中的任何位置,然后在包含任何匹配文件的子目录上运行重命名例程。