eg:
#find /agent4.0/swap/ "*" | xargs -n 10 rm {} \;
刪除的過程會報檔案或目錄不存在的提示。但檔案總算被刪除了問題解決。
find: 0403-027 The parameter list is too long 這個錯誤資訊很讓人迷惑: 難道該目錄
下檔案太多了麼? 其實不是的, 問題出在那個 "*" 上,Korn Shell 預設把 * 作為
Metadata 處理進行了擴充進而這條語句被錯誤的解析我的操作平台是 AIX 5.3. 我不
確定這是和這個平台的 Korn Shell 有關
使用 ls / grep / find 等命令時侯因為萬用字元的使用, 一不小心就會遇到這樣的錯誤可
以通過對對象添加引號來禁止擴充
另外有的時候 使用 rm 命令的時候也可能遇到:
rm:0403-027 The parameter list is too long.
這個錯誤的根本原因是因為 /usr/include/limits.h 定義系統核心 LINE_BUFSZ 限制如
果有大量檔案數需要刪除可以考慮用 xargs 的 -n 參數進行大量刪除.參考如下樣本:
find /backup/ -ctime 2 -print | xargs -n 10 rm {} \;
[DBAPP@root@/agent4.0/swap]#lsattr -E -l sys0 -a ncargs
ncargs 64 ARG/ENV list size in 4K byte blocks True
[DBAPP@root@/agent4.0/swap]#chdev -l sys0 -a ncargs=6
sys0 changed
0403-027 The parameter list is too long
時我們在執行rm或其它命令的時候,系統會報0403-027 The parameter list is too long的錯,如:
#find ./ -mtime +10 -name *.trc ksh: /usr/bin/find: 0403-027 The parameter list is too long.
出現這種情況主要是因為AIX核心參數ncargs控制,ncargs參數說明如下:
ncargs 用途: 指定運行 exec() 子常式時,ARG/ENU 列表(大小為 4 KB 的塊)允許的最大大小。
值: 預設值:6;範圍:6 到 1024
顯示: lsattr -E -l sys0 -a ncargs
更改: chdev -l sys0 -a ncargs=NewValue
更改會立即效而且在引導期間儲存下來。
診斷: 使用者不可以執行任何附加的進程,因為傳遞給 exec() 系統調用的變元表太長。低預設值可能造成一些程式失敗並出現幅角列表太長錯誤訊息,在這種情況下,您可以嘗試使用以上的 chdev 命令增加 ncargs 值,然後重新運行該程式。
調整: 這是為了防止變元表過長引起 exec() 子常式失敗的一種機制。請注意,調整到一個較高 ncargs 值會對系統記憶體資源加一些額外的限制。
瞭解了0403-027錯誤,現在我們有討論兩種方法解決:
方法一:
1.調高ncargs 值
#chdev -l sys0 -a ncargs=64
2.OK,可以刪除了
#rm *
3.工作做完,把參數調回原值
chdev -l sys0 -ncargs=4
方法二:使用遞迴式參數傳遞
find ./ -mtime +10 -exec rm {} \;