Linux

如何刪除文件名有 utf-8 字元問題的文件

  • October 20, 2016

我想通過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。對於非常奇怪的文件名,這可能更安全。使用-print-ls首先驗證將刪除哪個文件。類似於以下內容:

~$ ls -i myweirdfile
183435818 myweirdfile
~$ find . -xdev -inum 183435818 -print
./myweirdfile
~$ find . -xdev -inum 183435818 -delete
~$ find . -xdev -inum 183435818 -print
~$

請記住,硬連結對多個名稱使用相同的 inode 編號,因此您要確保在任何地方都沒有被刪除的雜散附加名稱(除非您顯然想這樣做)。

引用自:https://serverfault.com/questions/537749