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

时间:2013-09-25 15:08:31

标签: regex linux grep find

我的Linux机器上有一个项目,其中包含在Windows中被视为非法/保留的字符的文件(http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx)。该项目在多个文件夹中有超过10,000个文件,我将识别这些文件的路径。

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

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

3 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:12)

这个发现单行应该适合你:

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

答案 2 :(得分:2)

上述任何一个答案都没有找到以空格(&#39;&#39;)或句点/点(&#39;。&#39;)结尾的文件或目录,这些文件或目录在Win32 API中也不可见

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

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