2015-01-02 188 views
2

我試圖把文件重命名像所有文件: Name1_searchstats_metrics_20141230T133000036.log 喜歡的東西:Name2_searchstats_metrics_20141230T133000036.log重命名目錄

我想:rename -n 's/\Name1_/\Name2_/' *.log,但我得到的錯誤:

bash: /usr/bin/rename: Argument list too long 

有人可以幫忙嗎?

+1

這是因爲你必須用'* .LOG擴大這麼多的文件'模式。也許你可以使用'find'或'while'循環 – fedorqui

回答

4

可能是最簡單的解決方案,因爲你正在使用bash是遍歷文件列表與for循環:

$ for i in *; do rename -n 's/Name1_/Name2_/' $i; done 

您還可以過濾如果需要,可以使用命令中的任何通配符,如*.log

還有其他更令人費解的方式來實現這一點,特別是如果你需要做文件名的特定字符串操作,即使用awkfind -exec,但希望這可以幫助你的事情了以明確的方式進行排序。

由@glglgl建議編輯答案

的一個更全面,更詳細的解釋以上可在超級用戶發現: https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script

+1

'因爲我* .log'沒有這些限制,並且使用''''''''''總是容易出錯,應該避免。 – glglgl

+0

謝謝,編輯我的答案更加清晰。 –

2

如果參數列表對於linux命令來說太長,xargs通常會救援。

試試這個:

ls *.log | xargs rename -n 's/\Name1_/\Name2_/' 
+0

我在這裏沒有訪問UNIX終端的工作,所以不知道我的語法是否正確,但我猜它應該工作。 –

+0

也得到這個命令同樣的錯誤 –

+1

在你原來的命令(你發佈的問題),嘗試通過第一次餵它更少的文件數量(說10左右)。看看是否成功。 –