linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录
平時一般使用php腳本實現一些文件管理功能,總歸沒有shell腳本強大,雖然本人不會寫shell腳本,但是讀懂shell腳本還是沒問題的。對于“遞歸刪除空目錄”這樣簡單的功能使用php來寫有點麻煩,從網上搜到這樣一個shell腳本實現非常簡單:#!/bin/bash
#?author:?十年后的盧哥哥
#?des:?delete?empty?directories?recursive
deleteempty()?{
find?${1:-.}?-mindepth?1?-maxdepth?1?-type?d?|?while?read?-r?dir
do
if?[[?-z?"$(find?"$dir"?-mindepth?1?-type?f)"?]]?>/dev/null
then
echo?"$dir"
rm?-rf?${dir}?2>&-?&&?echo?"Empty,?Deleted!"?||?echo?"Delete?error"
fi
if?[?-d?${dir}?]
then
deleteempty?"$dir"
fi
done
}
deleteempty
然后將這段代碼保存為deleteempty.sh,然后將保存后的shell腳本放置到待刪除的目錄下,直接執行sh?deleteempty.sh即可遞歸刪除所有的空文件夾。
仔細讀一下代碼,發現作者其實已經實現了傳參刪除目錄的功能,完全可以傳入待刪除目錄的參數。于是,我將其改編如下:#!/bin/bash
#?author:?十年后的盧哥哥
#?des:?delete?empty?directories?recursive
deleteempty()?{
find?${1:-.}?-mindepth?1?-maxdepth?1?-type?d?|?while?read?-r?dir
do
if?[[?-z?"$(find?"$dir"?-mindepth?1?-type?f)"?]]?>/dev/null
then
echo?"$dir"
rm?-rf?${dir}?2>&-?&&?echo?"Empty,?Deleted!"?||?echo?"Delete?error"
fi
if?[?-d?${dir}?]
then
deleteempty?"$dir"
fi
done
}
name=$1
deleteempty?"$name"
使用$1來獲取第一個參數,然后傳給deleteempty函數進行遞歸刪除,親測可用。
案例:建立一個test目錄,將deleteempty.sh上傳至test目錄,其子目錄結構如下,[root@localhost?test]#?cd?/test
[root@localhost?test]#?du?-a
0???????./dir3/dirC/file5
4???????./dir3/dirC
8???????./dir3
4???????./dir2/dirA
8???????./dir2
4???????./dir4/dirD
0???????./dir4/file4
8???????./dir4
4???????./deleteempty.sh
4???????./dir5/dirE/dir_V
8???????./dir5/dirE
12??????./dir5
4???????./dir1
48??????.
使用命令進行刪除,刪除后目錄結構如下:
sh?deleteempty.sh /test[root@localhost?test]#?sh?deleteempty.sh?/test
/test/dir2
Empty,?Deleted!
/test/dir4/dirD
Empty,?Deleted!
/test/dir5
Empty,?Deleted!
/test/dir1
Empty,?Deleted!
[root@localhost?test]#?du?-a
0???????./dir3/dirC/file5
4???????./dir3/dirC
8???????./dir3
0???????./dir4/file4
4???????./dir4
4???????./deleteempty.sh
20??????.
很明顯,與file4和file5相關的目錄都沒被刪除,而空目錄無論多深都被刪除了。
再次改造一下,這里不再使用shell腳本,而是將該腳本轉換為linux的命令——命令為deleteempty[root@localhost?test]#?vi?/usr/sbin/deleteempty
粘貼剛才的shell代碼并保存退出
[root@localhost?test]#?chmod?+x?/usr/sbin/deleteempty
[root@localhost?test]#?which?deleteempty
/usr/sbin/deleteempty
這時deleteempty可以作為一個簡單的linux命令進行帶參數刪除,效果是一樣的!
轉載隨意,但請附上文章地址:-)
總結
以上是生活随笔為你收集整理的linux 递归删除 空目录命令,使用shell脚本实现递归删除空目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令管理GPT分区,Linux
- 下一篇: 查找linux所有目录中包含字符,Lin