Pour clarifier les choses, j'ai des actions de dossier de configuration sur mon Mac car chaque fois qu'un périphérique USB est branché sur mon Mac, il exécutera un script shell.
Quand je liste tous les fichiers du répertoire / des volumes, je reçois
$ ls -a
. .. .DS_Store MobileBackups Storage WED
Ce que je veux faire, c'est lister tous les dossiers et fichiers situés dans WED ou n'importe quel périphérique USB qui apparaît, excluant donc les répertoires
. .. .DS_Store MobileBackups Storage
Me laissant avec
WED
Ce que j'ai pour le script jusqu'à présent est:
GLOBIGNORE='/Volumes/MobileBackups*':'/Volumes/Storage*'
find '/Volumes' >> /Users/Brett/dev/USBLOGS/LogUSB.txt
J'ai essayé plusieurs manières différentes mais il finit toujours par lister chaque fichier du répertoire / Volumes.
Toute aide serait grandement appréciée. Merci Brett
De plus, c'est MAC OS X El Capitan
grep
comme il est écrit maintenant, il ne peut renvoyer que le ou les noms de chemin d'accès complets du ou des périphériques de bloc USB montés à partir de la sortie de System Profiler en un seul.grep
processus (par bloc périphérique USB). Je suppose que j'étais trop fatigué pour le voir la nuit dernière. :)Réponses:
Puisque tu veux seulement
find
Pour agir sur les périphériques de bloc USB, voici un exemple d'utilisation des informations rapportées par System Profiler pour obtenir le point de montage de tout périphérique de bloc USB connecté et monté. En procédant ainsi, peu importe les autres points de montage existants./Volumes
le nom du périphérique de bloc USB n'a pas d'importance, car il est vérifié par System Profiler et non par lels
commander.J'ai modifié le code, encore une fois, en supprimant la ligne de commande composée, car il est peu probable qu'il soit exécuté de cette façon et qu'il est plus facile à gérer sous forme de script tout en ajoutant la possibilité de gérer des espaces dans le nom de libellé du périphérique de blocage USB. .
En modifiant temporairement le séparateur de champ interne
$IFS
, ajouterIFS=$'\n'
au script ignorera les espaces en tant que séparateur dans la sortie degrep
quand passé àfind
. Afin de ne pas jouer avec le code dans le reste de votre script, je reçois l’état de$IFS
et puis reposez-le après.Dans un script bash:
le
system_profiler SPUSBDataType
affiche les informations sur le bus USB et les acheminegrep
obtenir/Volumes/$whatever
par exemple./Volumes/USB Drive
en utilisant-oE
pour le'/Volumes/.*$'
qui sort/Volumes/
et tout ce qui suit après la fin de la ligne, donc'/Volumes/.*$'
traduira le nom de chemin complet du point de montage de tout périphérique de bloc USB monté. Donc, quel que soit le périphérique de blocage USB monté, il est affecté à$p
(J'ai choisi "p" pour chemin ) et utilisé avecfind
J'ai ajouté le/*
après cela, il ne produirait pas la fichiers de points . leif
bloc est là pour éviter toute sortie si aucun périphérique de bloc USB n'est monté.la source
$IFS
section dans Guide avancé de script de bash: 9.1. Variables internes pour une meilleure compréhension de la variable Bash du séparateur de champ interne [$IFS
]. Ensuite, si vous ne comprenez pas pourquoi je l'ai écrit comme je l'ai fait, je verrai si je peux le réduire à un seul champ de commentaire (600 caractères maximum).Voici une variante de la solution user3439894 sans configurer IFS ni mettre en boucle.
Les données sont analysées à partir de
system_profiler
avecawk
.awk
imprime les points de montage terminés par le caractère nul qui est ensuite redirigé versxargs
et les résultats sont écrits pouroutfile
.Pour exclure les fichiers de points de la sortie, ajoutez l'option! -name (not name) et! -path (pas chemin) à la commande de recherche.
la source
awk
! :) Base sur les commentaires de la réponse de chazlarson Brett ne veut pas que les fichiers point apparaissent, alors votre exemple peut-il être modifié facilement pour les exclure de la sortie? Quoi qu'il en soit, bonne réponse! +1Mon / Volumes dir:
Cette commande répertorie uniquement les fichiers sur le Recovery HD:
Vous pouvez ajouter plus de lecteurs à cette liste:
Trouvé ici: http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
la source