我試圖把文件重命名像所有文件: Name1_searchstats_metrics_20141230T133000036.log 喜歡的東西:Name2_searchstats_metrics_20141230T133000036.log重命名目錄
我想:rename -n 's/\Name1_/\Name2_/' *.log
,但我得到的錯誤:
bash: /usr/bin/rename: Argument list too long
有人可以幫忙嗎?
我試圖把文件重命名像所有文件: Name1_searchstats_metrics_20141230T133000036.log 喜歡的東西:Name2_searchstats_metrics_20141230T133000036.log重命名目錄
我想:rename -n 's/\Name1_/\Name2_/' *.log
,但我得到的錯誤:
bash: /usr/bin/rename: Argument list too long
有人可以幫忙嗎?
可能是最簡單的解決方案,因爲你正在使用bash是遍歷文件列表與for
循環:
$ for i in *; do rename -n 's/Name1_/Name2_/' $i; done
您還可以過濾如果需要,可以使用命令中的任何通配符,如*.log
。
還有其他更令人費解的方式來實現這一點,特別是如果你需要做文件名的特定字符串操作,即使用awk
或find -exec
,但希望這可以幫助你的事情了以明確的方式進行排序。
由@glglgl建議編輯答案
的一個更全面,更詳細的解釋以上可在超級用戶發現: https://superuser.com/questions/31464/looping-through-ls-results-in-bash-shell-script
'因爲我* .log'沒有這些限制,並且使用''''''''''總是容易出錯,應該避免。 – glglgl
謝謝,編輯我的答案更加清晰。 –
我在這裏沒有訪問UNIX終端的工作,所以不知道我的語法是否正確,但我猜它應該工作。 –
也得到這個命令同樣的錯誤 –
在你原來的命令(你發佈的問題),嘗試通過第一次餵它更少的文件數量(說10左右)。看看是否成功。 –
這是因爲你必須用'* .LOG擴大這麼多的文件'模式。也許你可以使用'find'或'while'循環 – fedorqui