>我的 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 '*[ .]'