Rename

錯誤。使用 Windows 保留字元重命名文件和目錄

  • March 13, 2020

我有一個無法安裝在 Linux Mint 上的硬碟驅動器,為了修復它,我不得不去 Windows 並執行chkdsk /f e:. chkdsk 解決了這個問題,但它用特殊字元重命名了每個文件並將這些文件移動到一個found.000目錄。所以現在我必須像以前一樣移動和重命名這些文件。如果我不時執行命令以使用特殊字元重命名文件,我可以避免再次發生這種情況。

我想從目前目錄遞歸重命名文件和目錄。****換行符應替換為空格字元 < > : " \ | ? *刪除或更好地替換為未保留的類似字元,並且應刪除文件名開頭結尾的****空格。這是我想要的一個例子:

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')

這會更好

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')

根據這個答案,它應該是這樣的:

LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

我需要忽略該..Trash-1000目錄,因為此命令給了我輸入/輸出錯誤並且命令停止工作。如果該目錄中有可以重命名的文件,則擁有一個處理這些錯誤的腳本將是完美的。

我被告知要..Trash-1000按照這個答案修剪目錄。我也看了這個。但這樣做是行不通的:

LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

而且它仍然沒有刪除文件名開頭和結尾的空格。

我不得不將我的問題重寫為問題腳本以遞歸替換文件名中的無效字元,而不是目錄,重命名沒有回答我的問題。

可以對每個其他目錄執行一次命令,而不是修剪給出輸入/輸出錯誤的目錄。

這是我用來刪除 Windows 保留字元的命令:

find . -execdir rename -n 's/[\r\n]+/ /g;
                          s/:/./g;
                          s/[\|]/-/g;
                          s/[<>"?*]//g;
                          s/[ \f\t\v]+$//g;
                          s/^[ \f\t\v]+//g' {} \;

它將換行符轉換為空格,然後替換:.,然後更改\|-,然後刪除<>"?*,然後刪除文件名末尾的空格,然後對開頭的空格執行相同的操作。

引用自:https://unix.stackexchange.com/questions/572623