如何删除除符号链接指向的目录之外的所有目录

AVJ*_*AVJ 2 linux bash symbolic-link

我有以下目录结构。

drwxr-xr-x 5 ec2-user ec2-user 4096 May 22 07:03 TEEST  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 05:33 BEE-TES  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 24 10:53 ONE  
drwxr-xr-x 5 ec2-user ec2-user 4096 May 25 09:50 TWO  
lrwxrwxrwx 1 ec2-user ec2-user   28 May 25 09:50 previous -> TWO  
drwxr-xr-x 5 ec2-user ec2-user 4096 Jun  1 11:00 TEMP  
lrwxrwxrwx 1 ec2-user ec2-user   28 Jun  1 11:00 current -> TEMP
Run Code Online (Sandbox Code Playgroud)

如何删除除符号链接指向的目录之外的所有目录?

xen*_*oid 5

{ find . -type l -exec readlink {} \; ; find . -type d -exec basename {} \; ; } | sort | uniq -u | tail -n +2 | xargs rmdir
Run Code Online (Sandbox Code Playgroud)

慢动作:

  • find . -type l -exec readlink {} \;查找链接并列出相应的目录
  • find . -type d -exec basename {} \;查找并列出目录
  • 大括号中的命令的输出列出了所有目录一次,除了那些出现两次的链接目标目录之外
  • sort | uniq -u | tail -n +2仅保留唯一名称(因此,那些未链接到的目录)并删除.
  • xargs rmdir删除目录。替换为rm -r以删除其内容。