在Linux上查找名称中包含非法窗口字符的文件

我在我的Linux机器上有一个包含文件的项目,这些文件的字符在Windows中被认为是非法/保留( http://msdn.microsoft.com/zh-cn/library/aa365247%28VS.85%29.aspx )。 该项目在多个文件夹中有超过10,000个文件,我将确定这些文件的path。

我可以find . -name "*\?*" find . -name "*\?*"为每个非法/保留字符,但有没有更简单的方法来find所有包含< > : " / \ | ? *文件< > : " / \ | ? *

一旦我确定了,我想从这些文件中删除所有这些字符。

Solutions Collecting From Web of "在Linux上查找名称中包含非法窗口字符的文件"

这个发现一行应该为你工作:

 find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \; 

fnmatch模式允许你指定在[]中的字符如下:

 find . -name '*[<>:/\\|?*]*' 

上面的答案都没有找到以空格('')或句号/点('。')结尾的文件或目录,这些文件或目录在Win32 API中也是不可见的。

添加到.eg @ falsetru的答案,可以做

 find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'