Maison Opération et maintenance exploitation et maintenance Linux Apprentissage 'Advanced Bash-scripting Guide' (15) : Test des fichiers de liens rompus (lien brisé)

Apprentissage 'Advanced Bash-scripting Guide' (15) : Test des fichiers de liens rompus (lien brisé)

Jul 10, 2017 pm 06:16 PM
测试

本文所选的例子来自于《Advanced Bash-scripting Gudie》一书,译者 杨春敏 黄毅

<span style="color: #008080"> 1</span> #/bin/<span style="color: #000000">bash
</span><span style="color: #008080"> 2</span> <span style="color: #000000">#用一个纯粹的shell脚本来找出坏链接文件
</span><span style="color: #008080"> 3</span> #什么是broken link?<span style="color: #000000">对于符号链接(软链接),如果先删除原文件,则会成为坏链接(broken link)
</span><span style="color: #008080"> 4</span> 
<span style="color: #008080"> 5</span> <span style="color: #000000">方法一
</span><span style="color: #008080"> 6</span> <span style="color: #0000ff">find</span> <span style="color: #800000">"</span><span style="color: #800000">somedir</span><span style="color: #800000">"</span> -type l -print0 | <span style="color: #0000ff">xargs</span> -r0 <span style="color: #0000ff">file</span> | <span style="color: #0000ff">grep</span> <span style="color: #800000">"</span><span style="color: #800000">broken symbolic</span><span style="color: #800000">"</span> | <span style="color: #0000ff">sed</span> -e <span style="color: #800000">'</span><span style="color: #800000">s/^\|: *broken symbolic.*$/</span><span style="color: #800000">''</span><span style="color: #800000">/g</span><span style="color: #800000">'</span>
<span style="color: #008080"> 7</span> <span style="color: #000000">#这并不是一个纯粹的shell脚本
</span><span style="color: #008080"> 8</span> #-<span style="color: #000000">type l 文件类型为符号链接的文件
</span><span style="color: #008080"> 9</span> <span style="color: #000000">#file命令用来识别文件类型,也可用来辨别一些文件的编码格式
</span><span style="color: #008080">10</span> #如果文件是“broken link<span style="color: #800000">"</span><span style="color: #800000">,那么find . -type l -print0 | xargs -r0 file执行后就会显示如下:./yum.log.soft: broken symbolic link to `/tmp/yum.log'</span>
<span style="color: #008080">11</span> 
<span style="color: #008080">12</span> #\|<span style="color: #000000"> 是一个出现在样式内部并经过转义的定界符
</span><span style="color: #008080">13</span> <span style="color: #000000">#当定界符号出现在样式内部时,我们必须用前缀\对它进行转义
</span><span style="color: #008080">14</span> #<span style="color: #0000ff">sed</span> <span style="color: #800000">'</span><span style="color: #800000">s:text:replace:g</span><span style="color: #800000">'</span>
<span style="color: #008080">15</span> #<span style="color: #0000ff">sed</span> <span style="color: #800000">'</span><span style="color: #800000">s|text|replace|g</span><span style="color: #800000">'</span>
<span style="color: #008080">16</span> #<span style="color: #0000ff">sed</span> <span style="color: #800000">'</span><span style="color: #800000">s|te\|xt|replace|g</span><span style="color: #800000">'</span>
<span style="color: #008080">17</span> 
<span style="color: #008080">18</span> <span style="color: #000000">#例子:
</span><span style="color: #008080">19</span> #<span style="color: #0000ff">echo</span> <span style="color: #800080">123</span>:thisthisthis | <span style="color: #0000ff">sed</span> -e <span style="color: #800000">'</span><span style="color: #800000">s/^\|:*this.*$/</span><span style="color: #800000">''</span><span style="color: #800000">/g</span><span style="color: #800000">'</span>
<span style="color: #008080">20</span> #<span style="color: #800080">123</span>
<span style="color: #008080">21</span> #<span style="color: #0000ff">echo</span> <span style="color: #800080">123</span>:abcthisthisthis | <span style="color: #0000ff">sed</span> -e <span style="color: #800000">'</span><span style="color: #800000">s/|:.*this.*/</span><span style="color: #800000">''</span><span style="color: #800000">/g</span><span style="color: #800000">'</span>
<span style="color: #008080">22</span> #<span style="color: #800080">123</span>                注意两者的区别,即<span style="color: #800000">"</span><span style="color: #800000">:</span><span style="color: #800000">"</span>后有无<span style="color: #800000">"</span><span style="color: #800000">.</span><span style="color: #800000">"</span>
<span style="color: #008080">23</span> 
<span style="color: #008080">24</span> <span style="color: #000000">方法二:
</span><span style="color: #008080">25</span> #!/bin/<span style="color: #000000">bash
</span><span style="color: #008080">26</span> 
<span style="color: #008080">27</span> <span style="color: #000000">#检查目录是否传入参数,如果没有传入参数,就以当前目录作为搜索目录,
</span><span style="color: #008080">28</span> <span style="color: #000000">#如果有传入的参数,以传入参数的目录作为搜索目录
</span><span style="color: #008080">29</span> <span style="color: #000000"># 其实这个$@是不可以改成$1的,有很多位置参数的情况还是存在的,换成$1只对第一个位置参数有效
</span><span style="color: #008080">30</span> <span style="color: #0000ff">if</span> [ $# -eq <span style="color: #800080">0</span><span style="color: #000000"> ]
</span><span style="color: #008080">31</span> <span style="color: #0000ff">then</span> 
<span style="color: #008080">32</span>    directorys=`<span style="color: #0000ff">pwd</span><span style="color: #000000">` 
</span><span style="color: #008080">33</span> <span style="color: #0000ff">else</span> 
<span style="color: #008080">34</span>    directorys=<span style="color: #000000">$@ 
</span><span style="color: #008080">35</span> <span style="color: #0000ff">fi</span> 
<span style="color: #008080">36</span> 
<span style="color: #008080">37</span> #$1指的就是$directory,第一个位置参数,$<span style="color: #800080">1</span><span style="color: #000000">/*指的是$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</span>
Copier après la connexion

脚本运行结果

 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que pensez-vous de furmark ? - Comment furmark est-il considéré comme qualifié ? Que pensez-vous de furmark ? - Comment furmark est-il considéré comme qualifié ? Mar 19, 2024 am 09:25 AM

Que pensez-vous de furmark ? 1. Définissez le « Mode d'exécution » et le « Mode d'affichage » dans l'interface principale, ajustez également le « Mode de test » et cliquez sur le bouton « Démarrer ». 2. Après avoir attendu un moment, vous verrez les résultats du test, y compris divers paramètres de la carte graphique. Comment Furmark est-il qualifié ? 1. Utilisez une machine à pâtisserie Furmark et vérifiez les résultats pendant environ une demi-heure. Elle oscille essentiellement autour de 85 degrés, avec une valeur maximale de 87 degrés et une température ambiante de 19 degrés. Grand châssis, 5 ports de ventilateur de châssis, deux à l'avant, deux en haut et un à l'arrière, mais un seul ventilateur est installé. Tous les accessoires ne sont pas overclockés. 2. Dans des circonstances normales, la température normale de la carte graphique doit être comprise entre « 30 et 85 ℃ ». 3. Même en été, lorsque la température ambiante est trop élevée, la température normale est de « 50 à 85 ℃.

Rejoignez une nouvelle aventure Xianxia ! Le pré-téléchargement de 'Zhu Xian 2' 'Wuwei Test' est maintenant disponible Rejoignez une nouvelle aventure Xianxia ! Le pré-téléchargement de 'Zhu Xian 2' 'Wuwei Test' est maintenant disponible Apr 22, 2024 pm 12:50 PM

Le « Test d'inaction » du nouveau MMORPG féerique fantastique « Zhu Xian 2 » sera lancé le 23 avril. Quel genre de nouvelle histoire d'aventure féerique se produira sur le continent Zhu Xian des milliers d'années après l'œuvre originale ? Le monde immortel des six royaumes, une académie à plein temps pour cultiver des immortels, une vie libre pour cultiver des immortels et toutes sortes de divertissements dans le monde immortel attendent que les amis immortels l'explorent en personne ! Le pré-téléchargement "Wuwei Test" est maintenant ouvert. Les amis fées peuvent accéder au site officiel pour télécharger. Vous ne pouvez pas vous connecter au serveur de jeu avant le lancement du serveur. Le code d'activation peut être utilisé après le pré-téléchargement et l'installation. est terminé. "Zhu Xian 2" "Inaction Test" horaires d'ouverture : 23 avril 10h00 - 6 mai 23h59 Le nouveau chapitre d'aventure de conte de fées de la suite orthodoxe de Zhu Xian "Zhu Xian 2" est basé sur le roman "Zhu Xian" comme un modèle basé sur la vision du monde de l'œuvre originale, l'arrière-plan du jeu est défini.

Comment utiliser MTR pour tester la fiabilité de la base de données MySQL ? Comment utiliser MTR pour tester la fiabilité de la base de données MySQL ? Jul 13, 2023 pm 12:05 PM

Comment utiliser MTR pour tester la fiabilité de la base de données MySQL ? Présentation : MTR (MySQL Test Runner) est un outil de test officiellement fourni par MySQL, qui peut aider les développeurs à effectuer des tests fonctionnels et de performances des bases de données MySQL. Au cours du processus de développement, afin de garantir la fiabilité et la stabilité de la base de données, nous devons souvent effectuer divers tests, et MTR fournit une méthode simple, pratique et fiable pour effectuer ces tests. Étapes : Installez le lanceur de test MySQL : tout d'abord, vous devez le télécharger depuis le site officiel de MySQL.

Quelles sont les différences entre les tests fonctionnels et la couverture dans différentes langues ? Quelles sont les différences entre les tests fonctionnels et la couverture dans différentes langues ? Apr 27, 2024 am 11:30 AM

Les tests fonctionnels vérifient la fonctionnalité des fonctions via des tests en boîte noire et en boîte blanche, tandis que la couverture du code mesure la partie du code couverte par les scénarios de test. Différents langages (tels que Python et Java) ont des cadres de test, des outils de couverture et des fonctionnalités différents. Des cas pratiques montrent comment utiliser Unittest et Coverage de Python et JUnit et JaCoCo de Java pour les tests de fonctions et l'évaluation de la couverture.

Compétences en tests de bases de données à Golang Compétences en tests de bases de données à Golang Aug 10, 2023 pm 02:51 PM

Compétences en matière de test de bases de données dans Golang Introduction : Les tests de bases de données sont un maillon très important lors du développement d'applications. Des méthodes de test appropriées peuvent nous aider à découvrir des problèmes potentiels et à garantir l'exactitude des opérations de la base de données. Cet article présentera quelques techniques courantes de test de bases de données dans Golang et fournira des exemples de code correspondants. 1. Tests à l'aide d'une base de données en mémoire Lors de l'écriture de tests liés aux bases de données, nous sommes généralement confrontés à une question : comment tester sans recourir à une base de données externe ? Ici, nous pouvons utiliser la mémoire

Le nouveau roi des FPS domestiques ! Le champ de bataille « Opération Delta » dépasse les attentes Le nouveau roi des FPS domestiques ! Le champ de bataille « Opération Delta » dépasse les attentes Mar 07, 2024 am 09:37 AM

"Opération Delta" lancera aujourd'hui (7 mars) un test PC à grande échelle appelé "Codename: ZERO". Le week-end dernier, ce jeu a organisé un événement d'expérience flash mob hors ligne à Shanghai, et 17173 a également eu la chance d'être invité à participer. Ce test remonte à un peu plus de quatre mois depuis le dernier, ce qui nous rend curieux, quels nouveaux points forts et surprises l'Opération Delta apportera-t-elle en si peu de temps ? Il y a plus de quatre mois, j'ai expérimenté « l'Opération Delta » lors d'une séance de dégustation hors ligne et la première version bêta. A cette époque, le jeu n'ouvrait que le mode "Action Dangereuse". Pourtant, l’opération Delta était déjà impressionnante pour l’époque. Dans un contexte où les grands constructeurs se ruent sur le marché du jeu mobile, un tel FPS comparable aux standards internationaux

Comment utiliser Selenium pour les tests Web automatisés Comment utiliser Selenium pour les tests Web automatisés Aug 02, 2023 pm 07:43 PM

Présentation de l'utilisation de Selenium pour les tests d'automatisation Web : les tests d'automatisation Web sont une partie essentielle du processus de développement logiciel moderne. Selenium est un puissant outil de test automatisé qui peut simuler les opérations des utilisateurs dans un navigateur Web et mettre en œuvre des processus de test automatisés. Cet article expliquera comment utiliser Selenium pour les tests d'automatisation Web et sera accompagné d'exemples de code pour aider les lecteurs à démarrer rapidement. Préparation de l'environnement Avant de commencer, vous devez installer la bibliothèque Selenium et le pilote du navigateur Web

PHP Jenkins 101 : la seule façon de démarrer avec CI/CD PHP Jenkins 101 : la seule façon de démarrer avec CI/CD Mar 09, 2024 am 10:28 AM

Introduction L'intégration continue (CI) et le déploiement continu (CD) sont des pratiques clés du développement de logiciels modernes qui aident les équipes à fournir des logiciels de haute qualité plus rapidement et de manière plus fiable. Jenkins est un outil CI/CD open source populaire qui automatise le processus de création, de test et de déploiement. Cet article explique comment configurer un pipeline CI/CD avec Jenkins à l'aide de PHP. Configurer Jenkins Installer Jenkins : Téléchargez et installez Jenkins à partir du site Web officiel de Jenkins. Créer un projet : créez un nouveau projet à partir du tableau de bord Jenkins et nommez-le en fonction de votre projet php. Configurer le contrôle de source : configurez le référentiel git de votre projet PHP en tant que Jenkin

See all articles