如何递归清理父目录中的所有空文件和目录?
假设我有这个目录结构:
Parent/
|____Child1/
|______ file11.txt (empty)
|______ Dir1/ (empty)
|____Child2/
|_______ file21.txt
|_______ file22.txt (empty)
|____ file1.txt
Run Code Online (Sandbox Code Playgroud)
我应该以这样的方式结束:
Parent/
|____Child2/
|_______ file21.txt
|____ file1.txt
Run Code Online (Sandbox Code Playgroud)
Phi*_*ing 36
这是一个非常简单的单线:
find Parent -empty -delete
Run Code Online (Sandbox Code Playgroud)
这是相当不言自明的。虽然当我检查时,我很惊讶它成功删除了 Parent/Child1。通常,除非您指定-depth.
这有效是因为-delete暗示-depth. 请参阅GNU 查找手册:
-delete删除文件; 如果删除成功,则为 true。如果删除失败,则会发出错误消息。如果 -delete 失败,find 的退出状态将为非零(当它最终退出时)。使用 -delete 会自动打开 -depth 选项。
请注意,这些功能不是Posix 标准的一部分,但很可能在许多 Linux 发行版中都有。你可能有小的如高山Linux作为他们根据一个特定的问题Busybox的不支持-empty。
那做其他系统包括非标准-empty和-delete包括BSD和OSX但显然不是AIX。
bxm*_*bxm 12
这是两个命令的解决方案
find Parent/ -type f -size 0 -delete
Run Code Online (Sandbox Code Playgroud)
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
NBrmdir无法删除非空目录,因此运行是安全的但会产生错误,我们正在隐藏
如上所述,但更具体地说明被忽略的错误消息。如果消息因发行版而异,则可能需要修改。
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
| grep -iv "Directory not empty$"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2739 次 |
| 最近记录: |