錯誤。使用 Windows 保留字元重新命名檔案和目錄

錯誤。使用 Windows 保留字元重新命名檔案和目錄

我的硬碟無法安裝在 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' {} +

而且它仍然沒有刪除檔案名稱開頭和結尾的空格。

我不得不將我的問題重寫為問題使用重新命名遞歸替換檔案名稱(而不是目錄)中的無效字元的腳本沒有回答我的。

答案1

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

這是我用來刪除 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' {} \;

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

相關內容