我的硬碟無法安裝在 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' {} \;
它將換行符號轉換為空格,然後替換:
,.
然後用 更改\|
,-
然後刪除<>"?*
,然後刪除檔案名稱末尾的空格,然後對開頭的空格執行相同的操作。