我使用 Ubuntu 18.04、19.10
如果目录是空的,则使用#!/bin/bash
脚本从远端删除目录并在有任何文件/文件的目录中停止。
说..我已经使用以下命令创建了多个目录
mkdir -p $HOME/.local/my/sub/directories/1/2/3
后来,我在从目录“my to 1/2/3”开始的所有目录中创建了大量文件。
过了一段时间,我删除了目录“my”、“directories”、“1”、“2”、“3”中的所有文件。请注意,目录中sub
有一些文件。
mkdir -p
选项将查看命令中是否有父目录mkdir -p $HOME/.local/my/sub/directories/1/2/3
并且它是否安全。
问题:像上面一样,是否有任何命令可以查看目录是否为空并从远端删除并在目录中停止,sub
我的意思是$HOME/.local/my/sub
答案1
该命令的反转mkdir -p
是rmdir -p
. rmdir -p
将删除文件夹结构,直到文件夹不为空。您应该能够在命令中使用rmdir
而不是:mkdir
rmdir -p $HOME/.local/my/sub/directories/1/2/3
您还可以指定通配符,例如,如果您$HOME/.local/my/sub/
包含像directories1
,directories2
例如directories3
,可以这样做:
rmdir -p $HOME/.local/my/sub/directories*/1/2/3
或者
rmdir -p $HOME/.local/my/sub/*/1/2/3
如果在删除任何文件夹时它们包含数据或其他文件夹,您将收到一条错误消息,提示目录不为空并停止。
rmdir: failed to remove directory '/home/user/.local/my/sub': Directory not empty
希望这可以帮助!
答案2
我会尝试两种方法。简单的方法如下:
# Command to return only empty directories in the current directory:
find . -type d -empty -print
现在在我的 Ubuntu 版本上,我可以简单地执行以下操作:
# Find empty files, and delete them:
find . -type d -empty -delete
否则,您可以创建一些脚本,使用逻辑来计算目录中的文件数量,然后删除它们。以下是计算子目录中的文件数量的起点:
#!/bin/bash
for i in */ .*/ ; do
echo -n $i": " ;
(find "$i" -type f | wc -l) ;
done
答案3
这更接近于相反的情况mkdir -p
:
$ cat deldir
#!/bin/bash
[[ $# = 0 ]] && { echo "usage: ${0##*/} DIRECTORY..." >&2; exit 1; }
rc=0
while [[ $# != 0 ]] ;do
dir=${1%/} # in case someone specifies DIRECTORY/ out of habit
shift
while true ;do
rmdir -- "$dir" || { rc=1; break; }
[[ $dir = */* ]] || break
dir=${dir%/*}
done
done
exit $rc
例子:
mkdir -p a/b/c x/y/z
deldir a/b/c x/y/z