Linux

如何重命名目錄中具有特殊字元和空格的所有文件?

  • April 22, 2022

如何重命名特定目錄中的所有文件,其中文件的名稱中包含空格和特殊字元($ 和 @)?

我嘗試使用以下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以實際重命名文件。

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