我在Linux机器上有一个项目,其中包含带有在Windows中被认为是非法/保留的字符的文件(http://msdn.microsoft.com/zh- cn/library/aa365247%28VS.85%29.aspx)。该项目在多个文件夹中有10,000多个文件,我将确定这些文件的路径。
我可以find . -name "*\?*"为每个非法/保留字符,但是有一种更简单的方法来查找包含以下内容的所有文件< > : " / \ | ? *
find . -name "*\?*"
< > : " / \ | ? *
确定后,我想从每个文件中删除所有这些字符。
这种单线查找应该为您工作:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;