La question concerne les scripts shell dans bash
.
Comment vérifier avec un script quels fichiers dans le répertoire actuel sont des liens mous?
Au cas où j'avais utilisé le mauvais terme, lorsque je dis liens soft , je parle de fichiers créés à l'aide de ln -s
.
La seule chose que j'ai réussi à penser est d'évaluer ls -la
comme une expression, et analyser ses résultats, mais évidemment, ce n'est pas la meilleure solution.
Voir - 'Expressions conditionnelles' dans man bash
- Dans ce cas, vous voulez -h
:
for file in *
do
if [ -h "$file" ]; then
echo "$file"
fi
done
Vous n'avez peut-être pas vraiment besoin d'un script. Pour afficher les liens symboliques dans le dossier actuel, sans recouvrer dans un dossier enfant:
trouve . -MaxDepth 1 -Type L -Print
Ou, pour obtenir d'autres informations, utilisez l'une des:
trouve . -MaxDepth 1 -Type L -exec ls -ld {} + trouver. -MaxDepth 1 -Type L -Print0 | xargs -0 ls -ld
Pour dire si Un fichier est un lien symbolique, on peut utiliser readlink
, ce qui ne produira rien si ce n'est pas un lien symbolique. L'exemple suivant n'est pas très utile, mais montre comment readlink
ignore les fichiers et les dossiers normaux. Utilisez l'un des:
trouve . -MaxDepth 1 -exec Readlink {} + trouver. -MaxDepth 1 -print0 | Xargs -0 Readlink
Notez que ce qui précède -exec ... +
et xargs ...
sont beaucoup plus rapides que -exec ... \;
. Comme:
temps Trouver/usr/bin -maxdepth 1 -Type L -exec ls -ld {} \; réel 0m0.372s [.____] utilisateur 0m0.087s [.] SYS 0M0.163S TEMPS TROUVER/USR/BIN -MAXDEPTH 1 -TYPE L -XEC LS -LD {} + [ ] SYS 0M0.008S Temps Trouver/USR/BIN -MAXDEPTH 1 -TYPE L -PRINT0 | xargs -0 ls -ld [.____] réel 0m0.012s [.____] User 0m0.004S SYS 0M0.009S