我的Linux机器上有一个项目,其中包含在Windows中被视为非法/保留的字符的文件(http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx)。该项目在多个文件夹中有超过10,000个文件,我将识别这些文件的路径。
我可以为每个非法/保留字符find . -name "*\?*"
,但有更简单的方法来查找包含< > : " / \ | ? *
的所有文件
一旦我确定了,我想从每个文件中删除所有这些字符。
答案 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 '*[ \.]'