我有以下目录结构。
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
如何删除除符号链接指向的目录之外的所有目录?
答案1
{ find . -type l -exec readlink {} \; ; find . -type d -exec basename {} \; ; } | sort | uniq -u | tail -n +2 | xargs rmdir
慢动作:
find . -type l -exec readlink {} \;
找到链接并列出相应的目录find . -type d -exec basename {} \;
查找并列出目录- 括号中的命令的输出列出所有目录一次,除了那些出现两次的链接目标
sort | uniq -u | tail -n +2
仅保留唯一名称(即未链接到的目录)并删除.
xargs rmdir
删除目录。替换为rm -r
以删除其内容。
答案2
{ find /some/symlinks/* -type l -exec sh -c "readlink {} | xargs basename" \; ; find /some/folders/* -maxdepth 1 -type d -prune -exec basename {} \; ; } | sort | uniq -u | awk '{print "/some/folders/"$0}' | xargs rm -r
这可以处理不同目录中的多种类型的符号链接。
find /some/symlinks/* -type l -exec sh -c "readlink {} | xargs basename" \;
查找符号链接并获取目录的基本名称。
find //some/folders/* -maxdepth 1 -type d -prune -exec basename {} \;
从文件链接处查找所有基本名称。不要进入子目录并进行修剪,这样您只能获得文件夹名称
sort | uniq -u
排序并找出没有链接的。
awk '{print "/some/folders/"$0}'
将目录放回原处。
xargs rm -r
删除该文件夹。