簡體   English   中英

在 Linux 上查找名稱中包含非法 Windows 字符的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM