[英]Find files with illegal windows characters in the name on Linux
我的 Linux 機器上有一個項目,其中包含在 Windows 中被視為非法/保留字符的文件( http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx )。 該項目在多個文件夾中有超過 10,000 個文件,我將確定這些文件的路徑。
我可以find . -name "*\\?*"
find . -name "*\\?*"
用於每個非法/保留字符,但是有沒有更簡單的方法來查找包含< > : " / \\ | ? *
所有文件< > : " / \\ | ? *
確定后,我想從每個文件中刪除所有此類字符。
這個 find one-liner 應該適合你:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y="$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x")" && mv "$x" "$y" ' \;
fnmatch 模式允許您指定[]
中的字符,如下所示:
find . -name '*[<>:/\\|?*]*'
上述答案均未找到以空格 (' ') 或句點/點 ('.') 結尾的文件或目錄,這些文件或目錄在 Win32 API 中也不可見。
添加到 .eg @falsetru 的答案中,可以這樣做
find . -name '*[<>:/\\|?*]*' -o -name '*[ \.]'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.