2017-03-07 62 views
-1

編寫一個將文件夾名稱作爲命令行參數的shell腳本,並生成一個包含大小爲0的所有子目錄的名稱的文件。這就是我所擁有的至今。這個腳本的如何列出與其大小相同的子目錄中的所有內容

echo 'folder name' 
read folder 
ls -l sheet.txt 
+0

這是一門功課的問題嗎?你可以使用任何標準的Unix工具嗎? du命令應該是有幫助的。 – MicahStetson

+0

我想到了du命令。 – Mohamed

+0

你的意思是一個*號碼爲0 *的目錄?你的意思是它不包含任何文件?或者它根本沒有文件系統塊?或者說它包含的文件沒有數據?事實上,根據您選擇的定義,有不同的答案。 –

回答

1

取決於你如何定義 「0號」,這應該工作:

#!/bin/sh 
du $1 | awk '$1 == 0 { print $2 }' 
+0

你是對的,指出有多種方法來定義目錄的「大小」! –

0
files=(`ls`) 
for file in ${files[@]} 
do 
     size=(`stat --printf="%s\n" $file`) 
     if [ $size -eq 0 ] 
     then 
       echo $file 
     fi 
done 

你chenge標準輸出流的文件,結果將寫入文件。幷包裝這cript功能和遞歸遍歷所有子目錄。 如果你需要我可以寫完整的代碼。

遞歸碼:

function search { 
    cd $1 
    files=(`ls`) 
    for file in ${files[@]} 
    do 
     type=(`stat --printf="%F\n" $file`) 
     if [ "$type" == "directory" ] 
     then 
      search $file 
     else 
      size=(`stat --printf="%s\n" $file`) 
      if [ $size -eq 0 ] 
      then 
        echo $file 
      fi 
     fi 
    done 
    cd .. 
} 

search . 
+0

你可以寫完整的代碼。 Maxim – Mohamed

+0

當文件名可能包含空格或換行符時,你能解釋一下它是如何健壯的嗎?事實上,你似乎在迭代'ls'的輸出,這是一個非常脆弱的反模式。 –

+0

是的,這是問題。但是你可以使用另一個分隔符來分割文件名。 –

相關問題