Linux
如何刪除文件名有 utf-8 字元問題的文件
我想通過
bash rm
命令從伺服器中刪除文件。這是一個範例文件
Test_ Mürz.jgp
。如何大規模刪除文件名中具有此類字元問題的文件……尤其是當您不知道字元的位置時。
對於單個文件或小型文件集,如果萬用字元萬用字元不能讓您獲得所需的精度,您可以組合
ls -i
(或stat
,如果可用)和find -inum
.為安全起見,在使用 find 時
-inum
,請始終確保也使用-xdev
將搜尋限制為單個文件系統。不這樣做可能會產生意想不到的結果。例如:
~$ ls -i myweirdfile 183435818 myweirdfile ~$ find . -xdev -inum 183435818 -exec rm -i '{}' ';' rm: remove regular file `./myweirdfile'? y ~$
或者,在一次呼叫中(這可能取決於 GNU coreutils stat,這在 Linux 上應該是一個相當安全的假設,並使用 sh 樣式的程序替換):
~$ find . -xdev -inum $(stat -c '%i' 'myweirdfile') -exec rm -i '{}' ';' rm: remove regular file `./myweirdfile'? y ~$
您也可以使用 find 的
-delete
操作而不是-exec
‘ing rm。對於非常奇怪的文件名,這可能更安全。使用-ls
首先驗證將刪除哪個文件。類似於以下內容:~$ ls -i myweirdfile 183435818 myweirdfile ~$ find . -xdev -inum 183435818 -print ./myweirdfile ~$ find . -xdev -inum 183435818 -delete ~$ find . -xdev -inum 183435818 -print ~$
請記住,硬連結對多個名稱使用相同的 inode 編號,因此您要確保在任何地方都沒有被刪除的雜散附加名稱(除非您顯然想這樣做)。