我在Debian框中有一个包含多个子目录的数据目录,当系统处理了子目录的内容时,它会添加一个子目录" .processed"进入它。
不幸的是,当数据被删除时," .processed"目录被遗忘,我必须在仍然包含数据的目录中手动删除它们。
有没有办法只删除只包含目录的子目录" .processed"没有其他文件或目录?
答案 0 :(得分:0)
您可以使用此shell脚本:
#!/bin/bash
find . -type d -print | tac | while read -r file ; do
if [[ "$(ls -A "$file")" = ".processed" ]];
then
rmdir "$file"/".processed"
rmdir "$file"
fi
done
这个脚本循环在find . -type d
给出的所有目录上。如果它发现只包含名为.processed
的目录的目录,则删除.processed
目录和包含它的目录。仅删除空目录,因此脚本使用rmdir
。一般来说,尽量避免在脚本中使用rm -rf
,因为它可能很危险......
如果要删除的目录的顺序在目录之前放置一个子目录,则rmdir
将失败。使用rm -rf *
解决了问题,但很危险。这里的解决方案是管道tac
并反转find
给出的顺序。
该脚本适用于文件名中的空格。感谢Sorpigal answer, named pipe to while, newline terminated的解决方案。