2017-03-07 76 views
0

我想編寫一個腳本,將文件夾的名稱作爲命令行參數,並生成一個包含大小爲0的所有子文件夾(空子文件夾)名稱的文件。這是我得到的:生成一個包含所有空子文件夾名稱的文件

#!/bin/bash 
echo "Name of a folder' 
read FOLDER 

for entry in "$search_dir"/* 
do 
    echo "$entry" 
done 

回答

0

我會建議你接受其建議使用find,而不是答案。但是爲了完整起見,這裏有一些關於你的代碼的反饋。

  • 您將輸入目錄讀入FOLDER,但從未使用此變量。
  • 另外,不要使用大寫字母作爲私有變量;這是保留給系統變量的。
  • 您在提示字符串中有不成對的引號。如果開盤報價是雙重報價,則需要用雙引號關閉,反之亦然。
  • 您可以遍歷目錄條目,但無法隔離目錄條目,更不用說空目錄了。
  • 最後,沒有在你的腳本中使用bash只設施,所以這將是安全的,有些更便攜的使用#!/bin/sh

現在,遍歷目錄可以通過使用search_dir/*/,而不是僅僅search_dir/*進行;並通過檢查目錄中的通配符是否僅返回目錄本身來確定哪些是空的。 (這是假設默認通配符行爲 - 與nullglob你會作出不匹配的通配符擴展到一個空表,但是這是在某些情況下有問題的,所以它不是默認的。)

#!/bin/bash 

# read -p is not POSIX 
read -p "Name of a folder" search_dir 

for dir in "$search_dir"/*/ 
do 
    # [[ is Bash only 
    if [[ "$dir"/* = "$dir/*" ]]; then # Notice tricky quoting 
     echo "$dir" 
    fi 
done 

使用通配符擴展與[是有問題的,因爲它不準備處理通配符擴展 - 如果通配符擴展爲多個文件名,則會得到「太多的參數」 - 所以我使用的是稍微溫和的Bash替換[[,這很好。或者,您可以使用case,我實際上更喜歡這裏;但我堅持要求if,以便只對腳本進行最小限度的更改。

3

你的腳本沒有你想要的邏輯。 find命令有此

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

功能將打印從給定的路徑開始空目錄/至/ DIR

相關問題