Linux下經過 rm -f 刪除大量文件時報錯:Argument list too long

Linux下經過 rm -f 刪除大量的小文件時出現相似以下錯誤信息:mysql

  -bash: /bin/rm: Argument list too long

以下圖所示:sql

blob.png

問題緣由


若是待刪除文件中包含的小文件數量過多,一般是因爲受到 shell 參數個數限制所致。shell

這個是Linux系統存在的限制,能夠經過以下指令查看該參數值的配置:安全

 
getconf ARG_MAX

解決辦法


注:bash

  • 刪除操做爲高風險命令,請必定謹慎使用。確認經過快照等方式對數據進行了有效備份,或者明確能夠刪除。
  • 若是待處理的文件數目過多,由於處理時間較長,推薦在業務低峯期進行操做,對磁盤的IO消耗較高。
  • 對於 cp、mv 等均可以採起相同的方式實現處理。
  • 請務必覈實 dir 定義的目錄中除了待刪除文件外無其餘類型的文件,避免誤刪除。

能夠經過以下方式嘗試刪除:ui

結合 awk 刪除

可以使用 awk 一次刪除一個的方式進行刪除。但必須先進入該目錄下。操做方法以下:
1.先進入該目標目錄:spa

如圖:
blob.png
2. 使用 awk 刪除:code

 
ls -l| awk '{ print "rm -f ",$9}'|sh

如圖:blog

blob.png

3. 再次使用命令 ls -l 查看,發現文件已經刪除完成了.如圖:
blob.pngip

結合 xargs 刪除

經過 ls 來配合 xargs 刪除 test 目錄下的全部文件:

1.png

 

結合 find 刪除

經過 find 來完成,更加安全智能,支持的參數更多。

能夠先使用 ls 命令列出須要刪除的文件看是否正確,而後再執行刪除命令。例如,經過以下指令,刪除 test 目錄下的 png 文件:

 
find /usr/local/tests/ -name "*.png" |xargs rm -r

1.png

 

在執行rm命令時提示Argument list too long,以下:
arg1.jpg

經過自定義腳本刪除

能夠經過如下腳本經過循環實現刪除,以下:

 
#!/bin/bash
# 此處經過 DIR 指定待處理文件所在的目錄
DIR='/root/mysql'  #待刪除目錄
cd $DIR
for I in `ls`
do
#讀取ls結果中的各個文件名進行強制刪除
  rm -f $I    
done
相關文章
相關標籤/搜索