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



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

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

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

这个查找单行应该适合你:

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

fnmatch模式允许您指定[]中的字符,如下所示:

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

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

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

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

最新更新