有没有办法逆转 mkdir -p 选项的作用?

有没有办法逆转 mkdir -p 选项的作用?

我使用 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 -prmdir -p. rmdir -p将删除文件夹结构,直到文件夹不为空。您应该能够在命令中使用rmdir而不是:mkdir

rmdir -p $HOME/.local/my/sub/directories/1/2/3

您还可以指定通配符,例如,如果您$HOME/.local/my/sub/包含像directories1directories2例如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

相关内容