2012-06-08 145 views
1

我是shell編程的新手。 基本上,我寫了一個小腳本執行時在特定的文件夾中清除某些文件類型:通過shell刪除文件

#!/bin/bash 
echo "cleaning temp extensions " 
find -type f -name '*.pyc' -exec rm -f {} ';' 
find -type f -name '.*.swp' -exec rm -f {} ';' 
find -type f -name '*~' -exec rm -f {} ';' 
echo "files cleaned!!" 

但現在,我想清理從那裏這個shell腳本存在的文件夾中的所有文件。

因此,舉例來說,如果我有像

folderA/ folderB/ folderC/ clean.sh 

當我運行這個clean.sh它刪除folderA FolderB中的所有文件類型和夾C 我應該做的這個腳本什麼修改? 謝謝。

+0

誰投誰的「關閉」..你能告訴我這是怎麼回事.. 只要看一邊有關的答案.. – Fraz

+0

這似乎更相關的東西,我期望一個「超級用戶」是能夠做到。這不是個人的,並沒有跟着投票。它只是熟悉常用的shell工具。現在,如果這個問題正在討論一些循環或遞歸調用的bash語法...更多「編程」。 – 2012-06-08 18:45:08

+0

@pst:很酷。謝謝你的提示 :) – Fraz

回答

1

這並不完全清楚你要求什麼。

刪除所有文件在當前目錄:

find . -maxdepth 1 -type -f -delete 

要刪除當前目錄下的所有文件中的所有目錄它下面:

find . -type -f -delete 

要刪除當前所有文件和目錄目錄:

find . -delete 

如果你真的要刪除「所有文件fr om這個shell腳本所在的文件夾,「這真是太瘋狂了。爲什麼要將腳本複製到目錄中以刪除該目錄中的文件?如果你的意思是「我wan't能夠與在指定的目錄或目錄指定的擴展刪除文件」,那麼它的工作是這樣的:

#!/usr/bin/env bash 

find "[email protected]" -type f \(-name '*.pyc' -o -name '*.swp' -o -name '*.~' \) -delete 

而在你的PATH這個保存到一個目錄(例如/usr/local/bin),那麼你可以說:

clean.sh folderA folderB folderC 

或任何其他你想要的。

2

可以將所有3個查找命令組合成一個像這樣的:

find -type f \(-name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 

我們執行這個發現在folderA使用:

find folderA/ -type f \(-name '*.pyc' -o -name '.*.swp' -o -name '*~' \) -exec rm -f {} \; 
0

要刪除所有文件,刪除-name ...過濾器:

find -type f -exec rm -f {} ';' 

明顯的警告:小心這一點。