使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接

 更新时间:2020年02月03日 11:05:57   作者:AndrewYZWang  
这篇文章主要介绍了使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接

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

在使用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

总结

以上所述是小编给大家介绍的使用脚本实现自动清除指定文件夹下丢失链接文件的符号链接,希望对大家有所帮助!

相关文章

  • perl去除重复内容的脚本代码(重复行+数组重复字段)

    perl去除重复内容的脚本代码(重复行+数组重复字段)

    perl去除重复内容的小脚本,有需要的朋友可以参考下,包括重复行、数据组中重复的字段
    2013-03-03
  • 在Perl中使用Getopt::Long模块来接收用户命令行参数

    在Perl中使用Getopt::Long模块来接收用户命令行参数

    我们在linux常常用到一个程序需要加入参数,现在了解一下perl中的有关控制参数的函数.getopt.在linux有的参数有二种形式.一种是–help,另一种是-h.也就是-和–的分别.–表示完整参数.-表示简化参数
    2013-03-03
  • 用perl写的单位电脑信息采集程序

    用perl写的单位电脑信息采集程序

    perl,后来我又改过了增加了一些交互和数据库检测的功能。主要用于收集ip、mac、姓名、房间,后来又加入了维修记录的功能。服务器端接受数据并存入数据库中。
    2008-08-08
  • fdupe 查找重复文件的Perl脚本代码

    fdupe 查找重复文件的Perl脚本代码

    fdupe 是一个很小的 Perl 脚本,用来检索指定目录并找出其中重复的文件,该脚本是通过文件内容来识别是否重复文件,而非文件名。fdupe 无需其他 Perl 脚本支持,运行速度非常快
    2013-03-03
  • perl如何避免脚本在windows中闪一下就关闭

    perl如何避免脚本在windows中闪一下就关闭

    写好了perl程序,运行后,准备等待结果输出时,结果双击后,看到屏幕闪了一下,然后什么都没有了,根本没有机会然你看到输出的结果
    2013-03-03
  • Perl文件句柄详解

    Perl文件句柄详解

    本文介绍一下Perl文件句柄的概念,要从文件中读取一块数据,应用程序需要调用函数ReadFile,并将Perl文件句柄在内存中的地址和要拷贝的字节数传送给操作系统
    2013-03-03
  • perl常问题集合之一

    perl常问题集合之一

    perl常问题集合之一...
    2007-03-03
  • Perl语言的循环实现方法小结

    Perl语言的循环实现方法小结

    Perl语言中提供了多种循环结构,包括for、while、do...while和foreach循环,每种循环都有其特定的应用场景和用法,循环控制语句如last、next和redo进一步提升了循环的灵活性,通过灵活运用这些循环,可以编写高效而简洁的代码,感兴趣的朋友跟随小编一起看看吧
    2025-01-01
  • perl中尖括号运算符(<>)使用说明

    perl中尖括号运算符(<>)使用说明

    perl中尖括号运算符的用途分享,这里简单介绍下,方便需要的朋友
    2013-03-03
  • Perl语言的语法糖示例详解

    Perl语言的语法糖示例详解

    Perl的语法糖更是其魅力所在,它不仅提高了开发效率,还使得代码更加直观易读,本文将深入探讨Perl语言中的语法糖,分析它们的工作原理及其对开发过程的影响,感兴趣的朋友一起看看吧
    2025-01-01

最新评论