使用 rename/find 递归重命名文件和目录

使用 rename/find 递归重命名文件和目录

我开始使用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// /-}'

它负责深度优先处理文件,并比您通常手动执行的操作更好地检查冲突或覆盖(仅限常规文件)。

相关内容