系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 脚本中心 > per > 详细页面

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

时间:2020-02-13来源:系统城作者:电脑系统城

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

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

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

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


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

总结

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

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载