find.-type f|egrep-i"~||&|@|#|<|>|;|:|!|'^'|,|-|_"|tee temp.txt
我不确定像 * 或 $ 这样的特殊字符。你能帮我解决这个问题吗?
首先,我建议编写一个采用单个文件名并修复它的脚本。然后你可以做:
find . -type f -exec /path/to/fixNames.sh "{}" ;
然后,fixNames.sh
可以包含:
rename 's/[ t]/-/' "$1" # blanks
rename "s/'",//" "$1" # characters to remove
rename 's/&/-n-/' "$1"
注意:使用具有一些错误文件名的文件夹进行测试!仅当您知道这不会导致问题时,才对真实文件运行此命令!
相关:
- 外壳脚本简介
如何设置两个数组 - 一个用于特殊字符,一个用于替换(它们应包含相同数量的索引)?
#!/bin/bash
SPECIALCHARS=("," " " "&" "\" """)
REPLACEMENTS=("" "-" "-n-" "" "")
for i in $(seq 0 $((${#SPECIALCHARS[@]}-1))); do
find . -exec rename "${SPECIALCHARS[$i]}" "${REPLACEMENTS[$i]}" {} ;
done