關於正確處理contain weird symbols like newlines的文件名有太多瞭解。我認爲使用IFS設置爲換行符將解決問題,除非明顯的情況下,如果一個名稱帶有換行符。所以作爲一種防禦手段,腳本可以首先檢查一個子樹是否至少有一個帶有換行符的文件,並停留一條消息來首先修復名稱。 令人驚訝的是,我不能讓find
與-regex
匹配。只有成功的方式是相當醜陋如何查找名稱中包含換行符的文件
find . -name "*"$'\n'"*"
但是,例如find . -regex ".*\n.*"
不起作用。 Emacs的正則表達式應該允許像\ n這樣的轉義字符,不是嗎?有趣的是,它匹配名稱中帶有字符n
的另一個文件。使用不同的-regextypes進行實驗只能找到這種類型awk
sed
posix-extended
還有一些會用換行符匹配文件(比如說a\nxxx
),但是除此之外,它們也會與文件n
匹配。奇怪的。 另一方面,GNU查找文檔不會告訴任何有關支持轉義字符的任何內容,如\n
。他們真的不被支持,所以我們不能在尋找正則表達式中使用\t \n \r \a
和類似的東西嗎?
事實上,這是可行的。但是find -regex測試會有類似的可能嗎?到目前爲止似乎不是,但無論如何感謝。 –
有可能,請參閱更新的答案,只需用'。*'替換'*'即可。 – anubhava
+1我添加了一個POSIX兼容版本,因爲它似乎不值得添加一個競爭的答案,這樣一個小的差異。 – chepner