11

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

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

确定后,我想从每个文件中删除所有此类字符。

4

3 回答 3

17

这个 find-liner 应该适合你:

find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
于 2013-09-25T15:33:33.330 回答
16

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

find . -name '*[<>:/\\|?*]*'
于 2013-09-25T15:14:53.150 回答
5

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

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

find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
于 2017-03-05T18:38:11.077 回答