Recherche complète + dans les paquets

Berthold

Bricoleur du dimanche
Club iGen
5 Novembre 2004
4 924
5 184
par là-bas, environ.
Bonjour
MacBook Pro El Capitan ;
je cherche -mais ne trouve pas-
une façon de chercher des fichiers selon leur extension (par exemple *.png)
absolument partout sur le DD, y compris dans le contenu des paquets.

J'ai cherché avec Spotlight, chou blanc
j'ai cherché avec ls sous Terminal, pas tout compris, en tout cas ça n'a pas fonctionné,


Faut-il se logguer sur un volume bootable externe ? Autre chose ?

Merci de vos pistes.
 
Bonjour,

Une solution, avec un logiciel que je trouve très bien et très pratique pour toutes mes recherches : EasyFind

Bonne journée
 
Oui mais non : ce qu'il demande est de pouvoir inspecter aussi le contenu des archives.
Avec find on se contente des fichiers présents sur le système de fichiers et on n'ausculte pas leur contenu.
EasyFind propose justement cette option (au moins pour les paquetages), ce qui est tout à son honneur (et en plus il est gratuit et en mode graphique...).

Bien sûr on peut aussi écrire un script qui fera le boulot (avec l'aide de lsbom, tar etc.) mais là, c'est déjà prêt à l'emploi.
 
  • J’aime
Réactions: lamainfroide
Bonsoir,

lisant
une façon de chercher des fichiers selon leur extension

y compris dans le contenu des paquets

Je ne comprends pas
Oui mais non : ce qu'il demande est de pouvoir inspecter aussi le contenu des archives

Or, avec la commande find préconisée par @jeanjd63 , j'ai bien trouvé tous les fichiers *.png, *.pdf, *.jpg incorporés aux applications.
Exemple :
/Applications/TemperatureMonitor.app/Contents/Resources/English.lproj/Help/Images/LCDisplay.jpg

Certes, ce n'est pas graphique, mais une application de moins à installer, ça me convient déjà bien.
Il doit y avoir moyen de faire quelque chose avec Automator.
 
Là, il faut s'entendre.

Une application, vue du système de fichiers, ce n'est pas un paquet (ou un paquetage ou une archive) mais une simple arborescence.
Un paquet, tel que je le vois, c'est plutôt un fichier .tgz, .pkg etc.

Il faut donc demander à Berthold ce qu'il entend par "paquet". :)
 
Après avoir fait un petit test, EasyFind comprend "Package" au sens du Finder.
 
Salut @ tous.

Pour la phrase "y compris dans le contenu des paquets.", j'ai compris Applications installées.
Il est évident que la commande find ne recherche pas dans les archives.

Seul @Berthold pourra nous éclairer sur ce point précis.
 
Les fils ouverts sur un forum d'entraide comme celui de MAC OS X ont pour dénominateur commun d'être des « questions » appelant des « réponses ». Pour le plus grand nombre, une « réponse » à ces « questions » relève d'une maîtrise « technique » préconstituée ; pour quelque unes isolément, une « réponse » induit une enquête « heuristique » sur le sens qu'il convient de prêter aux mots. Le fil de l'ami Berthold :coucou: relève de cette seconde catégorie : il a donc tout pour me plaire et m'incite à venir y faire œuvre linguistique
361608_original.png


Un « paquet », dans le sens courant du mot Français, signifie selon le Littré : un « Assemblage de plusieurs choses liées ou enveloppées ensemble ». Le mot désigne donc une pluralité d'éléments contenus dans une enveloppe unique. On a donc affaire à un « objet paradoxal » : un contenu multiple dans une forme unicitaire. Un contraste entre l'intérieur composite et l'extérieur uniforme, l'essence complexe et l'apparence simple, la matière diverse et la figure singulière etc. (en quoi d'aucuns jugeraient qu'il s'agit d'un procédé du « mensonge » par lequel le complexe s'enveloppe dans une présentation trompeusement simple).

À appliquer ce mot « paquet » dans son sens tout à fait générique à des objets informatiques, on pourrait dire alors qu'un « dossier » est un « paquet », puisqu'il enveloppe un contenu pluriel de sous-dossiers et/ou de fichiers dans un contenant unique. Serait aussi un « paquet » une « application », puisqu'elle enveloppe un contenu pluriel de sous-dossiers et de fichiers (exécutables ou non) dans le contenant unique d'un répertoire. Serait encore un « paquet » une « archive » qui enveloppe aussi un contenu pluriel d'éléments dans un contenant unicitaire.

Il semble bien, pourtant, qu'il faille, dans le domaine informatique spécialisé, redéfinir le sens du mot « paquet », pour rendre compte de plusieurs exceptions techniques : a) si l'on fait à l'aide d'«Easy Find» une recherche de fichiers brute (par exemple tous les fichiers-images .png), seront listés tous les fichiers libres ou inclus dans des « dossiers », mais aucun recelé dans les paquets des « applications » ou des « archives » ; b) si l'on fait toujours à l'aide d'«Easy Find» une recherche de fichiers en incluant les « paquets » dans le domaine de recherche, alors sont listés en plus les fichiers recelés dans les « paquets » des « applications », mais non dans ceux des « archives » ; c) si l'on passe une commande de type ls -al à destination des 3 sortes d'objets précédents : « dossier », « application », « archive » => les 2 premiers sont indexés par le d de « directory » (dossier) et le 3è seul par le - de « file » (fichier).

Il semblerait alors qu'on ait avantage, informatiquement parlant, à distinguer ces 3 sortes d'objets logiques que le mot Français « paquet » englobe. On pourrait ainsi dire qu'un « dossier » est un « directory » (un "répertoire") ; qu'une « application » est un « bundle » (un "paquetage") ; qu'une « archive » est un « package » (un "paquet" au sens rigoureux). Un « dossier » est un "fichier de fichiers" : un catalogue indexant une série d'éléments qui peuvent avoir un ordre mais qui n'ont pas d'interaction dynamique entre eux = une arborescence comme dit bompi (exemple : une valise). Une « application » est une "machinerie de fichiers" : une organisation de rouages logiques en vue de produire un effet (exemple : une horloge). Une « archive » est un "compactage de fichiers" : une compression en 2D de la profondeur 3D d'un groupement de fichiers. En tant que cette sous-catégorie d'« archive » qu'est un « package » (paquet d'installation), on a affaire non pas à un simple « dossier » compressé ; mais à l'équivalent d'une « application aplatie » : « application », car un « package » d'install recèle une « machinerie logique » destinée à produire un effet d'installation ; mais « aplatie » (flattened), parce que le « bundle » en question n'a pas été couramment compressé, mais "laminé", càd. réduit à la dimension actuelle d'un fichier. Pour recourir à la métaphore, le « package » est comme la version image en 2D d'un objet en 3 dimensions. En l'état, ce n'est pas un répertoire, c'est bel et bien un fichier suite à l'opération de "presse hydraulique" du flattenage : le "laminage" de sa profondeur de paquet. Seule une « transformation rétrograde » (un "délaminage") peut reconstituer la profondeur 3D de sa machinerie logique.

La compression en fichier « archive » simple d'une dossier soustrait son arborescence à un logiciel de recherche, car pour accéder à cette arborescence, une rétro-morphose est requise : une décompression, ce qu'un logiciel de recherche ne va certainement pas s'autoriser à faire, car cette action créerait un dossier rejeton (au moins temporaire) à côté de l'archive mère. Le laminage (ou "super-compression") d'un bundle d'installation en un « flat_package » soustrait encore plus son arborescence de composants à un logiciel de recherche, car pour y accéder encore une rétro-morphose est requise : un désaplatissement, qui ne peut s'effectuer encore que par une création : la génération (du moins temporaire encore) d'un répertoire-miroir "unflattened" du "flat_package".

Tout le monde sait désarchiver une archive de dossier : il suffit de double-cliquer l'archive, et cette action appelle le logiciel dédié à opérer la rétro-morphose : la génération d'un dossier rejeton décompressé à côté de l'archive mère compressée. Par contre, double-cliquer un « package » ne produit absolument pas sa rétro-morphose, mais comme pour l'icône d'une application déclenche l'effet logique de la machinerie : pour un « package », le processus d'installation. Il faut alors recourir à l'exécutable UNIX pkgutil dans le «Terminal» si l'on veut désaplatir (unflatten) un « package » pour générer un répertoire-miroir en 3D offrant une arborescence inspectable. Voici la syntaxe de la commande :

Bloc de code:
pkgutil --expand [SOURCE] [DESTINATION]
où la source est le chemin à un « package » .pkg (il suffit d'opérer un glisser-déposer dans la fenêtre du «Terminal») mais où la destination ne doit absolument pas être l'intitulé d'un dossier préexistant, mais l'intitulé d'un dossier à créer à la localisation d'atterrissage ciblée (ainsi : Desktop/ ciblant le Bureau de session ouverte de l'utilisateur comme localisation d'atterrissage, accoller par exemple un BROL désignant un dossier non existant sur le Bureau mais à créer par pkgutil sur le Bureau). Comme les packages d'install d'«El Capitan» (par exemple) sont recelés dans une image-disque InstallESD.dmg, il faudrait donc commencer par la commande :

Bloc de code:
hdiutil attach /Applications/Install\ OS\ X\ El\ Capitan.app/Contents/SharedSupport/InstallESD.dmg
pour monter l'image-disque en un volume adressable : OS X Install ESD, puis enchaîner par un :

Bloc de code:
pkgutil --expand /Volumes/OS\ X\ Install\ ESD/Packages/Essentials.pkg Desktop/BROL
pour générer par désaplatissement du flat_package Essential.pkg recelé dans l'installateur d'«El Capitan» un dossier BROL sur le Bureau de session. Hélas ! rien n'est simple avec un flat_package d'install comme celui-là, car le « gros » des ressources d'install est recelé dans un fichier toujours "laminé" qui est un fichier payload et ce qui est "expansé" c'est la machinerie logique des exécutables qui vont se référer au fichier payload comme source d'installation. Mais le fichier payload lui-même demeure inadressable pour une recherche de fichiers si on s'arrête là.

En un mot comme en un seul : je déconseille formellement de s'engager dans cette voie manuelle, car il existe un utilitaire graphique exceptionnel dû au remarquable Charles Srstka : ☞Pacifist☜ (menus en Français) qui permet d'ouvir tout « package » afin de révéler son arborescence de dossiers/sous-dossiers/fichiers sans créer par là-même de dossier de décompactage effectif, mais une simple interface graphique temporaire où l'on peut passer une requête dans le champ de recherche (comme on peut aussi bien extraire une copie d'un élément désarchivé hors du package). Par exemple, une simple mention de l'extension .png va afficher la liste classée selon une arborescence des fichiers-images .png recelés dans le paquet d'installation Essentials.pkg d'«El Capitan». Idem pour une archive de dossier.

En résumé : utiliser «Pacifist» pour toute recherche dans des archives de dossiers ou des packages d'install. Eg :

mac0.pkg
367024_original.gif
 
Dernière édition par un modérateur:
Wohw ! :cool:

Un gros merci, je ne m'imaginais pas déclencher un fil aussi complet par ma question, que je croyais simple. En vous lisant, je me rends compte rétrospectivement que le terme 'paquet' est effectivement ambigu. Je l'entendais au sens où Mac OS X nous propose, par un clic droit, d'« Afficher le contenu du paquet », qu'il s'agisse d'applications, ou plus largement de bundles. Donc bien une arborescence, mais qu'un ls ne parcourt pas.

Les solutions les plus simples sont souvent les meilleures, la proposition de jeanjd63 correspond exactement à ce que j'imaginais. Je lui rajoute un >& pour enregistrer tout ça dans un fichier et je suis heureux.

:coucou::merci: à tous.
 
[[ Histoire d'éviter certaines confusions, je vais parler de recherche dans les paquetages : mot utilisé par les informaticiens en français (?) pour parler des archives qui servent à installer le système (on dit ça pour Linux et d'autres systèmes sympathiques). ]]

Petite astuce (que j'utilise à l'occasion).
Imaginons que l'on souhaite savoir dans quel paquetage se trouvait initialement la commande uuencode, on peut se contenter de consulter les reçus écrits par l'installateur sur le système de fichiers.
On va donc dans /private/var/db/receipts.
Et là, on utilise tout bêtement la commande lsbom qui liste le contenu des fichiers *.bom, lesquels décrivent le contenu des paquetages. Avec un petit enrobage pour ne pas être noyé par l'affichage.
Bloc de code:
for i in *.bom; do lsbom $i | grep uuencode > /dev/null ; if [ $? -eq 0 ] ; then echo $i; fi; done