递归替换特殊字符bash

时间:2018-09-06 14:17:38

标签: bash loops tr mv

我试图在某个文件夹和所有子文件夹中查找所有文件和文件夹,并替换所有特殊字符。所有空格均应替换为点,而其他所有内容均应删除。我尝试了几种不同的方法,但是当我使用“ mv”时,它似乎并没有保留目录结构;当我将“ rename”与“ find”一起使用时,它不想递归进行。

我最近得到的是:

for f in **/; do mv "$f" `echo $f | tr " " . | tr -dc '[:alnum:].'`; done

但是我认为该循环在某处中断了,因为它将文件名加在一起并将结果放置在父目录中。

1 个答案:

答案 0 :(得分:4)

您可以这样做:

$ python manage.py shell
>>> from django.conf import settings
>>> settings.MIDDLEWARE
...

这里有几点:

  • find . -depth -execdir rename 's/\s/./g; s/[^[:alnum:]./]//g' {} + -深度优先遍历目录层次结构。这样可以确保在重命名文件夹之前,在 文件夹中重命名文件
  • -depth-在子目录中执行命令 --execdir现在将是{},而不是./filename
  • 这是Perl风味的./dir1/dir2/filename,请检查您的手册页。