我正在尝试查找某个文件夹和所有子文件夹中的所有文件和文件夹,并替换所有特殊字符。所有空格都应该用点替换,其他一切都应该删除。我尝试过几种不同的方法但是当我使用“mv”时它似乎没有保留目录结构,当我使用“重命名”和“查找”它不想递归。
我得到的最接近的是:
for f in **/; do mv "$f" `echo $f | tr " " . | tr -dc '[:alnum:].'`; done
但我认为循环在某处被破坏,因为它将文件名一起添加并将结果放在父目录中。
你可以这样做:
find . -depth -execdir rename 's/\s/./g; s/[^[:alnum:]./]//g' {} +
这里有几点:
-depth
- 首先遍历目录层次结构。这可确保在重命名文件夹之前重命名文件夹中的文件-execdir
- 执行子目录中的命令 - {}
现在将是./filename
而不是./dir1/dir2/filename
rename
,请查看您的手册页。