Linux
如何重命名目錄中具有特殊字元和空格的所有文件?
如何重命名特定目錄中的所有文件,其中文件的名稱中包含空格和特殊字元($ 和 @)?
我嘗試使用以下
rename
命令將所有空格和特殊字元替換為 _:$ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $ rename -n 's/ |\$|@/_/g' * $ ls -lrt total 464 -rwxr-xr-x. 1 pmautoamtion pmautoamtion 471106 Jul 17 13:14 Bharti Blocked TRX Report Morning$AP@20150716.csv $
該命令有效,但不會對文件名進行任何更改,也不會返回任何錯誤。如何解決這個問題,還有其他方法嗎?
-n
國旗是為了——不作為
無操作:顯示哪些文件將被重命名。
所以如果你沒有任何改變是正常的。
關於你的命令,它對我有用:
$ touch "a @ test" $ ls a @ test $ rename -n 's/ |\$|@/_/g' * a @ test renamed as a___test
也許取決於你的外殼,你必須逃避 |
$ rename -n 's/ \|\$\|@/_/g' *
或者您可以使用
[…]
符號對字元進行分組:$ rename -n 's/[ @\$]/_/g' *
你可以這樣嘗試:
for file in ./*Block* do echo mv "$file" "${file//[ ()@$]/_}" done
如果您對結果感到滿意,請刪除
echo
之前mv
以實際重命名文件。