阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

如何自动清除指定文件夹下的符号链接

92次阅读
没有评论

共计 2595 个字符,预计需要花费 7 分钟才能阅读完成。

导读 这篇文章主要介绍了使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接, 本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

脚本可清除,指定文件夹下,对视链接文件的符号链接。

在使用 Linux 时,常常会为自己许多文件或者程序建立符号链接,这样就不用每次都到对应的文件夹下去寻找对应的文件而只需要对需要经常访问的文件建立符号链接就可以了,这样就能把你常需要访问的文件放到桌面上,或者指定到另外一个文件夹中。

这样访问时,方便了很多,但是用完之后往往留下许多的符号链接,这些链接需要用户自己手动确认是否可以删除,为 linux 的使用带来很多的不方便,使用该脚本就能解放你的双手,只需要执行一下脚本,就能将对应文件夹下没有用的符号链接清除。

#!/bin/bash
# 一个可以测试链接断掉的符号链接的文件,并且可以输出它们指向的文件
# 以便于它们可以把输出提供给 xargs 来进行处理 :)
# 比如. broken-link.sh /somedir /someotherdir|xargs rm
#
#下边的方法, 不管怎么说, 都是一种更好的办法:
#
#find "somedir" -type l -print0|\
#xargs -r0 file|\
#grep "broken symbolic"|
#sed -e 's/^\|: *broken symbolic.*$/"/g'
#
#但这不是一个纯粹的 bash 脚本, 最起码现在不是.
#注意: 谨防在 /proc 文件系统和任何死循环链接中使用!
##############################################################
#如果没有参数被传递到脚本中, 那么就使用
#当前目录. 否则就是用传递进来的参数作为目录
#来搜索.
####################
[$# -eq 0] && directorys=`pwd` || directorys=$@
 
#编写函数 linkchk 用来检查传递进来的目录或文件是否是链接,
#并判断这些文件或目录是否存在. 然后打印它们所指向的文件.
#如果传递进来的元素包含子目录,
#那么把子目录也放到 linkcheck 函数中处理, 这样就达到了递归的目的.
##########
linkchk () {
  for element in $1/*; do
    [-h "$element" -a ! -e "$element"] && echo \"$element\"
    [-d "$element"] && linkchk $element
    # 当然, '-h' 用来测试符号链接, '-d' 用来测试目录.
  done
}
#把每个传递到脚本的参数都送到 linkchk 函数中进行处理,
#检查是否有可用目录. 如果没有, 那么就打印错误消息和
#使用信息.
################
for directory in $directorys; do
  if [-d $directory]
    then linkchk $directory
    else
      echo "$directory is not a directory"
      echo "Usage: $0 dir1 dir2 ..."
  fi
  done
exit 0
# 创建一个新文件 name
andrew@andrew:/work/bash/src$ touch name
# 为 name 创建符号链接
andrew@andrew:/work/bash/src$ ln -s name aaa
# 删除 name 文件,aaa 将会变成丢失链接文件的符号链接
andrew@andrew:/work/bash/src$ rm name
# 查看 aaa 为执行当前目录下的 name 的符号链接文件
andrew@andrew:/work/bash/src$ ls -l
总用量 44
lrwxrwxrwx 1 andrew andrew  4 2 月  1 13:20 aaa -> name
-rwxrwxr-x 1 andrew andrew 8656 1 月 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 2 月  1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 1 月 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 1 月 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 1 月 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 2 月  1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 1 月 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 1 月 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 2 月  1 12:00 test.c
# 调用脚本清除当前文件夹中,丢失链接文件的符号链接
andrew@andrew:/work/bash/src$ bash broken_link.sh ./ | xargs rm
andrew@andrew:/work/bash/src$ ls -l
总用量 44
-rwxrwxr-x 1 andrew andrew 8656 1 月 30 14:46 a.out
-rw-rw-r-- 1 andrew andrew 1887 2 月  1 13:08 broken_link.sh
-rw-rw-r-- 1 andrew andrew 322 1 月 29 13:08 echo_unique.sh
-rw-rw-r-- 1 andrew andrew 1513 1 月 29 15:55 escape_charater.sh
-rw-rw-r-- 1 andrew andrew 279 1 月 30 13:48 exit_example.sh
-rw-rw-r-- 1 andrew andrew 199 2 月  1 11:52 if_else_more.sh
-rw-rw-r-- 1 andrew andrew 1946 1 月 30 21:03 if_true.sh
-rw-rw-r-- 1 andrew andrew 337 1 月 29 14:02 single_quotation_mark.sh
-rw-rw-r-- 1 andrew andrew 864 2 月  1 12:00 test.c

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计2595字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中