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

Roh*_*pra 8 regex linux grep find

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

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

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

anu*_*ava 15

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

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


fal*_*tru 13

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

find . -name '*[<>:/\\|?*]*'
Run Code Online (Sandbox Code Playgroud)


HAS*_*ASM 5

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

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

find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
Run Code Online (Sandbox Code Playgroud)