使用Bash替换DIRECTORY / SUBDIRECTORY名称中的DOTS或字符

时间:2015-11-25 19:43:15

标签: bash ubuntu find ubuntu-14.04 rename

我一直在寻找合适的解决方案。我找到了一些接近的例子。Bash script to replace spaces in file names 但我正在寻找的是如何替换当前DIRECTORY / SUBDIRECTORY名称中的多个.点,然后替换FILENAMES中的多个.点,不包括* .extention"递归&#34 ;

这个例子很接近但不对:

find . -maxdepth 2 -name "*.*" -execdir rename 's/./-/g' "{}" \;

另一个例子但不正确:

for f in *; do mv "$f" "${f//./-}"; done

所以

  

dir.dir.dir / dir.dir.dir / file.file.file.ext

会变成

  

DIR-DIR-DIR / DIR-DIR-DIR /文件文件file.ext

2 个答案:

答案 0 :(得分:1)

  1. 你必须在正则表达式中转义.(例如用于rename的表达式,因为默认情况下它具有“任何单个字符”的特殊含义。所以替换语句至少应该是s/\./-/g
  2. 您应该在{}命令中 引用find
  3. 需要两个find命令,因为你想要替换目录名中的所有点,但保留文件名中的最后一个点。
  4. 您正在搜索包含空格(* *)的文件名。这是故意的吗?

答案 1 :(得分:1)

您可以像这样分配给变量和管道:

char letter[2] = { char( rand() % range + min ), '\0' };