我开始使用centos 7在vmware上学习linux。我在该文件夹中创建了一个图像目录以及多层文件和子目录。大多数名称包含空格。我想使用一个命令一次重命名所有文件和目录。
我现在使用的命令是
find . -type f -exec rename "find" "replace" {} \;
&
find . -type d -exec rename "find" "replace" {} \;
其中查找是一个空格,替换是“-”(hiphen)。我什至尝试了下面的命令,查看堆栈交换中的答案之一。
find . -iname "find" -exec rename "find" "replace" {} \;
答案1
由于您要find
在 的鼻子下重命名目录,请告诉它在目录本身之前对目录的内容进行操作,使用-depth
.另一方面,将目录与常规文件分开并没有帮助。
要使用默认 CentOS 安装上提供的工具重命名文件,您可以使用 shell 和mv
.请注意仅更改基本名称,而不是目录名称(因为新目录尚不存在)。
find . -depth -exec bash -c '
for filename do
basename=${filename##*/}
mv "$filename" "${filename%/*}/${basename// /-}"
done
' _ {} +
答案2
zsh
此类问题的通常答案:
autoload zmv # best in ~/.zshrc
zmv -v '(**/)(* *)' '$1${2// /-}'
它负责深度优先处理文件,并比您通常手动执行的操作更好地检查冲突或覆盖(仅限常规文件)。