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)
上述答案均未找到以空格 (' ') 或句点/点 ('.') 结尾的文件或目录,这些文件或目录在 Win32 API 中也不可见。
添加到 .eg @falsetru 的答案中,可以这样做
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
Run Code Online (Sandbox Code Playgroud)