《Advanced Bash-scripting Guide》学习(十五):测试坏的链接文件(broken link)
发布时间 - 2017-07-10 00:00:00 点击率:次本文所选的例子来自于《advanced bash-scripting gudie》一书,译者 杨春敏 黄毅
1 #/bin/bash 2 #用一个纯粹的shell脚本来找出坏链接文件 3 #什么是broken link?对于符号链接(软链接),如果先删除原文件,则会成为坏链接(broken link) 4 5 方法一 6 find "somedir" -type l -print0 | xargs -r0 file | grep "broken symbolic" | sed -e 's/^\|: *broken symbolic.*$/''/g' 7 #这并不是一个纯粹的shell脚本 8 #-type l 文件类型为符号链接的文件 9 #file命令用来识别文件类型,也可用来辨别一些文件的编码格式 10 #如果文件是“broken link",那么find . -type l -print0 | xargs -r0 file执行后就会显示如下:./yum.log.soft: broken symbolic link to `/tmp/yum.log' 11 12 #\| 是一个出现在样式内部并经过转义的定界符 13 #当定界符号出现在样式内部时,我们必须用前缀\对它进行转义 14 #sed 's:text:replace:g' 15 #sed 's|text|replace|g' 16 #sed 's|te\|xt|replace|g' 17 18 #例子: 19 #echo 123:thisthisthis | sed -e 's/^\|:*this.*$/''/g' 20 #123 21 #echo 123:abcthisthisthis | sed -e 's/|:.*this.*/''/g' 22 #123 注意两者的区别,即":"后有无"." 23 24 方法二: 25 #!/bin/bash 26 27 #检查目录是否传入参数,如果没有传入参数,就以当前目录作为搜索目录, 28 #如果有传入的参数,以传入参数的目录作为搜索目录 29 # 其实这个$@是不可以改成$1的,有很多位置参数的情况还是存在的,换成$1只对第一个位置参数有效 30 if [ $# -eq 0 ] 31 then 32 directorys=`pwd` 33 else 34 directorys=$@ 35 fi 36 37 #$1指的就是$directory,第一个位置参数,$1/*指的是$1下所有的目录和文件 38 #这部分主要针对目录下的目录而言,如果$directory下还有一个目录,那么把整个目录作为位置参数传入linkchk函数,如果下面还有,再作为位置参数传入,这是递归的 39 #-h 检查符号链接文件是否存在(存在为真),! -e 检查文件是否不存在(不存在为真),这两个同时要成立是不是前后矛盾? 40 #经检查,发现不是这样,cat 坏链接名,会提示没有那个文件或目录,说明链接文件指向的原文件的值已不存在,其属性还在 41 linkchk() 42 { 43 for i in $1/* 44 do 45 if [ -h "$i" -a ! -e "$i" ] 46 then 47 echo "$i" 48 elif [ -d "$i" ] 49 then 50 linkchk "$i" 51 fi 52 done 53 } 54 55 #linkchk()是一个自定义的函数,$directory是这个函数中传入的第一个位置参数 56 for directory in $directorys 57 do 58 if [ -d $directory ] 59 then 60 linkchk $directory 61 else 62 echo "$directory is not a directory" 63 echo "Usage: $0 dir1 dir2 ..." 64 fi 65 done 66 67 exit 0
脚本运行结果
# 不存在
# 是一个
# 宋体
# 出现在
# 递归
# 这是
# 就会
# 还在
# 有很多
# 定界
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS管理器中快速创建并配置网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
jQuery 常见小例汇总
Laravel如何优化应用性能?(缓存和优化命令)
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
详解Oracle修改字段类型方法总结
消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
香港网站服务器数量如何影响SEO优化效果?
如何在云主机上快速搭建多站点网站?
智能起名网站制作软件有哪些,制作logo的软件?
JS经典正则表达式笔试题汇总
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Python图片处理进阶教程_Pillow滤镜与图像增强
如何在景安云服务器上绑定域名并配置虚拟主机?
浅谈javascript alert和confirm的美化
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
iOS发送验证码倒计时应用
java中使用zxing批量生成二维码立牌
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
如何快速生成橙子建站落地页链接?
Laravel如何发送系统通知?(Notification渠道示例)
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
java ZXing生成二维码及条码实例分享
Laravel如何处理异常和错误?(Handler示例)
佛山企业网站制作公司有哪些,沟通100网上服务官网?
历史网站制作软件,华为如何找回被删除的网站?
如何用低价快速搭建高质量网站?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Android GridView 滑动条设置一直显示状态(推荐)
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
Linux安全能力提升路径_长期防护思维说明【指导】
Laravel怎么在Blade中安全地输出原始HTML内容
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
如何在万网利用已有域名快速建站?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Laravel storage目录权限问题_Laravel文件写入权限设置
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
javascript中的try catch异常捕获机制用法分析
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
上一篇:c++ extern关键字作用_c++跨文件全局变量
下一篇:nmcli的网络配置
上一篇:c++ extern关键字作用_c++跨文件全局变量
下一篇:nmcli的网络配置


8