2014-11-16 51 views
-1

有一個特定的目錄被某些程序用作臨時/暫存目錄。
例如/a/b/c/work
在工作中,可能存在多個分層目錄,例如使用Perl如何清理沒有文件的目錄?

/a/b/c/work/ 
      \d1/ 
       \d1.1 
      \d2 
       \d2.2 

我想清理這個工作目錄,因爲剩下的文件需要空間。
本質上我需要刪除葉子目錄爲空的所有工作下的子目錄。
因此,如果d1.1爲空但d2.2有文件,則刪除d1(包括d1)但不包含d2的所有內容。
perl中最乾淨/標準的方法是什麼?
我以爲使用反引號解決方案,例如rm -rf等,但我認爲可以有一些比編碼ls的編碼序列更好的方法

注意:只是要清楚。我想在Perl中提供一個解決方案,因爲這不是一次性的,我不想每次都手動執行此操作。

回答

4

如果使用find命令,可以通過這種方式實現它。

find /path/to/dir -empty -type d -delete 

其中,

-empty只有找到空文件,並確保它是一個普通的文件或目錄。

-type d只匹配目錄。

-delete刪除文件。

始終把-delete選項在find命令的結束作爲find命令行作爲表達式求值,所以把-delete第一將使找到嘗試刪除您指定的起點下的所有內容。

要在shell腳本自動執行此請按照下面的代碼:

path=`pwd` 

find $path -empty -type d -delete 

,或者你可以給與一定的輸入像在這種情況下,下面的代碼將做的工作myShell.sh /path/to/mydir shell腳本的參數,

$path=$1 

find $path -empty -type d -delete 

至於如果你真的想要去perl的,你可以找到你的答案如下

​​

還短的方法

perl -MFile::Find -e"finddepth(sub{rmdir},'.')" 

其說明很好here

+0

1)這會刪除所有空的父目錄嗎? 2)我如何在Perl中做到這一點?只需使用反引號? – Jim

+0

請參閱OP – Jim

+0

中的更新您必須設置要刪除空目錄的目錄路徑和@Jim,希望您根據Linux shell要求提出要求。 – Skynet

相關問題