rm刪除大量文件

rm命令的一般形式爲:
  rm [選項] 文件…
  如果沒有使用- r選項,則rm不會刪除目錄。
  該命令的各選項含義如下:
  - f 忽略不存在的文件,從不給出提示。
  - r 指示rm將參數中列出的全部目錄和子目錄均遞歸地刪除。
  - i 進行交互式刪除。

 

在刪除大量文件時有點不太方便,使用rm -rf有時會報錯,“參數列太長”或“參數列溢出” 

 

find . -name "*.svn"|xargs rm -r

 

 

三、xargs

xargs - build and execute command lines from standard input

在使用find命令的- exec選項處理匹配到的文件時, find命令將所有匹配到的文件一起傳遞給exec執行。但有些系統對能夠傳遞給exec的命令長度有限制,這樣在find命令運行幾分鐘之後,就會出現 溢出錯誤。錯誤信息通常是“參數列太長”或“參數列溢出”。這就是xargs命令的用處所在,特別是與find命令一起使用。

find命令把匹配到的文件傳遞給xargs命令,而xargs命令每次只獲取一部分文件而不是全部,不像- exec選項那樣。這樣它可以先處理最先獲取的一部分文件,然後是下一批,並如此繼續下去。

在有些系統中,使用- exec選項會爲處理每一個匹配到的文 件而發起一個相應的進程,並非將匹配到的文件全部作爲參數一次執行;這樣在有些情況下就會出現進程過多,系統性能下降的問題,因而效率不高;

而使用xargs命令則只有一個進程。另外,在使用xargs命令時,究竟是一次獲取所有的參數,還是分批取得參數,以及每一次獲取參數的數目都會根據該 命令的選項及系統內核中相應的可調參數來確定。

來看看xargs命令是如何同find命令一起使用的,並給出一些例子。

下面的例子查找系統中的每一個普通文件,然後使用xargs命令來測試它們分別屬於哪類文件

#find . - type f - print | xargs file
. / . kde/Autostart/Autorun. desktop: UTF- 8 Unicode English text
. / . kde/Autostart/. directory: ISO- 8859 text/
. . . . . .
在整個系統中查找內存信息轉儲文件( core dump) ,然後把結果保存到/tmp/core. log 文件中:

$ find / - name "core" - print | xargs echo "" > / tmp/core. log
上面這個執行太慢,我改成在當前目錄下查找

#find . - name "file*" - print | xargs echo "" > /temp/core. log
# cat /temp/core. log
. / file6
在當前目錄下查找所有用戶具有讀、寫和執行權限的文件,並收回相應的寫權限:

# ls - l
drwxrwxrwx 2 sam adm 4096 10月 30 20: 14 file6
- rwxrwxrwx 2 sam adm 0 10月 31 01: 01 http3. conf
- rwxrwxrwx 2 sam adm 0 10月 31 01: 01 httpd. conf

# find . - perm - 7 - print | xargs chmod o- w
# ls - l
drwxrwxr- x 2 sam adm 4096 10月 30 20: 14 file6
- rwxrwxr- x 2 sam adm 0 10月 31 01: 01 http3. conf
- rwxrwxr- x 2 sam adm 0 10月 31 01: 01 httpd. conf
用grep命令在所有的普通文件中搜索hostname這個詞:

# find . - type f - print | xargs grep "hostname"
. / httpd1. conf: # different IP addresses or hostnames and have them handled by the
. / httpd1. conf: # VirtualHost: If you want to maintain multiple domains/hostnames
on your
用grep命令在當前目錄下的所有普通文件中搜索hostnames這個詞:

# find . - name /* - type f - print | xargs grep "hostnames"
. / httpd1. conf: # different IP addresses or hostnames and have them handled by the
. / httpd1. conf: # VirtualHost: If you want to maintain multiple domains/hostnames
on your
注意,在上面的例子中, /用來取消find命令中的* 在 shell中的特殊含義。

find命令配合使用exec和xargs可以使用戶對所匹配到的文件執行幾乎所有的命令。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章