Bonjour à tous,
J'aimerais copier tous les fichiers ayant un magic number identiques (tout du moins le début) au même endroit.
J'essaye donc de copier tous les fichiers ayant un début de magic number identique.
Mon problème est que lors de l'exécution, le find copie tous les fichiers shell. Ce que je voudrais c'est de copier tous les fichiers ayant un magic number correspondant à la boucle if et non les .sh
Voici mon code :
#!/bin/sh
if [ 'xxd -l 0x06 ~/Desktop/test.sh' | find . -type f -exec grep 00000000: 2321 2f62 696e {} \; ]
then find /home/user/ -iname "*.sh" -exec cp -t /home/user/Desktop/dossierFinal '{}' \;
else echo "marche pas"
fi
Je cherche une solution mais je ne la trouve pas. Je vous remercie de votre aide.
# Lit tes cours / demande à ton prof ?
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 2.
Bonjour,
ceci ressemble fortement à un exercice / devoir de formation … et ton code est un assemblage hétéroclite de commandes incomprises, je ne suis pas certains que demander à d'autres de faire ton taf soit très utile …
Anyway, as-tu clairement identifier l'algorithme qui formera la structure de ton programme ? (clairement commencer par un 'if' n'est pas bon signe).
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par paulo1998 . Évalué à 1. Dernière modification le 24 juillet 2019 à 14:26.
Non pas exactement, j'ai 53 ans. J'ai un vieux PC que j'ai récupéré. Je voudrais voir tous les scripts qui existent un peu partout et contrôler si certains peuvent poser des problèmes. Voilà le but de ma démarche.
Je ne suis pas très très calé en script. J'ai quelques bases et quelques recherches sur internet. Cela m'a ammené à ce script là.
Il y a juste la ligne du "then find" qui ne fonctionne pas. D'où la demande d'aide car je n'arrive pas avec mes recherches à faire ce que je souhaite (copier tous les fichiers avec un même magic number).
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 2. Dernière modification le 24 juillet 2019 à 17:01.
Ok désolé
ce n'est pas le problème principal de ton script, il est pensé à l'envers et incorrect même dans son test initial.
Je vais assumer que les quotes dans << 'xxd -l 0x06 ~/Desktop/test.sh' >> sont une erreur de saisie ici
Tu a écris:
Voila a peu prêt comment ce traduit ton script initial.
Tu as déjà une proposition de solution, une autre serait:
=> find recherche tout les fichiers
je lui dit pour chaque résultat de lancer un shell qui va executer "xxd" pour convertir les 6 premiers octets en hexa, sous un format condensé car pas besoin d'autre chose que la data brute, le résultat va être envoyé à grep et si ça match la chaine souhaitée le nom du fichier sera affiché.
Il suffirait de remplacer 'echo' par la commande de copie.
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par David Marec . Évalué à 2. Dernière modification le 24 juillet 2019 à 20:50.
A noter que si la clef se situe au même endroit dans les fichiers, il n'est pas utile de la passer à
grep
.devrait faire l'affaire. Ici, la clef se trouve en début de fichier (
-s 0
).Pour donner tout ça à manger à
find
, il est plus facile de décomposer le tout:Par contre, cela ne prend pas en charge les fichiers avec des espaces dans le nom.
Ceci se traduit par,
Il y a un bug dans l'affichage du code, les simple quotes sont interprétées.
Des mathjax apparaissent
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par Cyril Brulebois (site web personnel) . Évalué à 3. Dernière modification le 25 juillet 2019 à 08:01.
En même temps, quelle idée d'utiliser
`commande`
au lieu de$(commande)
?:)
C'est probablement une histoire de goût/habitude, mais que ça soit pour la lisibilité ou la facilité d'imbrication, je conseille chaleureusement la deuxième forme.
Pour les histoires de gestion d'espace, si on est parti pour faire une boucle, pourquoi s'amuser à utiliser
for
qui déclenche un découpage par mot plutôt que de passer par unwhile
qui découpe par ligne ?Debian Consultant @ DEBAMAX
[^] # Re: Lit tes cours / demande à ton prof ?
Posté par David Marec . Évalué à 2. Dernière modification le 29 juillet 2019 à 20:18.
C'est historique et portable, l'équivalence
$()
n'existe pas sous(t)csh
par exemple.L'idée est de modifier la profondeur de l'interprétation à l'intérieur des guillemets, en usant de guillemets différentes.
Je préfère utiliser directement la sortie de
find
en appelant un script de traitement par fichier, passé àexec ;
( et surtout pasexec +
).# Une écriture un peu différente
Posté par Cyril Brulebois (site web personnel) . Évalué à 2. Dernière modification le 24 juillet 2019 à 15:00.
Je te propose la structure suivante, qui devrait te permettre de travailler sereinement :
i.e. tu demandes à
find
de te dresser la liste de tous les fichiers, et tu fais une boucle dessus, fichier par fichier. Pour chacun, tu peux faire les tests de ton choix.Il est probable que tes fichiers
.sh
ne correspondent pas au magic number recherché, mais tu pourrais de toute façon les exclure en ajoutant un filtre sur le nom à l'appelfind
:! -name '*.sh'
Debian Consultant @ DEBAMAX
[^] # Re: Une écriture un peu différente
Posté par paulo1998 . Évalué à 1.
Merci Cyril de ta réponse.
Je vais travailler et je reviendrai si je n'y arrive pas dans quelques jours. Mais normalement ça devrait le faire.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.