我想編寫一個腳本,將文件夾的名稱作爲命令行參數,並生成一個包含大小爲0的所有子文件夾(空子文件夾)名稱的文件。這是我得到的:生成一個包含所有空子文件夾名稱的文件
#!/bin/bash
echo "Name of a folder'
read FOLDER
for entry in "$search_dir"/*
do
echo "$entry"
done
我想編寫一個腳本,將文件夾的名稱作爲命令行參數,並生成一個包含大小爲0的所有子文件夾(空子文件夾)名稱的文件。這是我得到的:生成一個包含所有空子文件夾名稱的文件
#!/bin/bash
echo "Name of a folder'
read FOLDER
for entry in "$search_dir"/*
do
echo "$entry"
done
我會建議你接受其建議使用find
,而不是答案。但是爲了完整起見,這裏有一些關於你的代碼的反饋。
FOLDER
,但從未使用此變量。#!/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
,以便只對腳本進行最小限度的更改。
你的腳本沒有你想要的邏輯。 find
命令有此
$ find path/to/dir -type d -empty
功能將打印從給定的路徑開始空目錄/至/ DIR