編寫一個將文件夾名稱作爲命令行參數的shell腳本,並生成一個包含大小爲0的所有子目錄的名稱的文件。這就是我所擁有的至今。這個腳本的如何列出與其大小相同的子目錄中的所有內容
echo 'folder name'
read folder
ls -l sheet.txt
編寫一個將文件夾名稱作爲命令行參數的shell腳本,並生成一個包含大小爲0的所有子目錄的名稱的文件。這就是我所擁有的至今。這個腳本的如何列出與其大小相同的子目錄中的所有內容
echo 'folder name'
read folder
ls -l sheet.txt
取決於你如何定義 「0號」,這應該工作:
#!/bin/sh
du $1 | awk '$1 == 0 { print $2 }'
你是對的,指出有多種方法來定義目錄的「大小」! –
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 .
你可以寫完整的代碼。 Maxim – Mohamed
當文件名可能包含空格或換行符時,你能解釋一下它是如何健壯的嗎?事實上,你似乎在迭代'ls'的輸出,這是一個非常脆弱的反模式。 –
是的,這是問題。但是你可以使用另一個分隔符來分割文件名。 –
這是一門功課的問題嗎?你可以使用任何標準的Unix工具嗎? du命令應該是有幫助的。 – MicahStetson
我想到了du命令。 – Mohamed
你的意思是一個*號碼爲0 *的目錄?你的意思是它不包含任何文件?或者它根本沒有文件系統塊?或者說它包含的文件沒有數據?事實上,根據您選擇的定義,有不同的答案。 –