Améliorer la présentation de la sortie de "find"

Au temps pour moi : j’avais bien lu ce message et je n’ai pas pris la peine d’essayer de trouver où était l’erreur . Aucune excuse .

Une fois corrigée les espaces vides et la présence de ( de ) ne provoquent plus de dysfonctionnement.

Qunat à la différence de comportement avec < ou < < je n’en vois aucune si ce n’est que lors de l’enreistrement source .bashrc bash me signale :

erreur de syntaxe près du symbole inattendu « <(find -maxdepth 1 -type f |sort) » .

Je reprendrai ça plus tard car je dois répéter la même erreur sans m’en rendre compte : laissons décanter .

Je pense qu’effectivement tu as besoin de plus de temps pour mieux cerner ton besoin.
Quelques points à toutes fins utiles:

:black_small_square: Ouvrir un sujet pour améliorer la sortie d’un ‹ find -maxdepth 1 ›, c’est-à-dire le répertoire courant, et trouver qu’un ‹ diff -r ›, c’est-à-dire récursif, n’est pas mal non plus, c’est pas facile à suivre pour ne pas dire contradictoire.

:black_small_square: Que signifie pour toi comparer deux répertoires ? est-ce juste comparer la liste de fichiers ? ou aussi te soucier de la date et du contenu des fichiers ?
Deux fichiers de même nom avec la même arborescence sur deux supports peuvent avoir des dates et un contenu totalement différents.
Juste lister et comparer ne te donne qu’un vague aperçu de l’éventuelle synchronicité de deux disques, puisque c’est finalement ce que tu veux faire, si je comprends bien, donc rien à voir avec un ‹ find -maxdepth 1 ›.

:black_small_square: Aussi pas compris les histoires de ‹ guillemets manquants ›.
Si je les vois, c’est qu’ils sont bien là, ils n’ont pas bougé depuis le début.
Si personne n’a rien tripoté par derrière sans mon accord, aucune raison de disparaître.
En faisant un copier/coller d’une fonction, aucune raison que des guillemets disparaissent non plus.
Il y a 3 types de guillements en bash qui ont une fonction précise et pas juste à fin décorative.

echo 'SHELL' 	-> SHELL
echo "SHELL" 	-> SHELL (aucune différence entre " et ' dans ce cas)
echo `SHELL`	-> bash: SHELL : commande introuvable
echo "$SHELL"	-> /bin/bash
echo '$SHELL' 	-> $SHELL

:black_small_square: Les redirections en bash5: certes pas évident et pas trivial, je te l’accorde, mais je ne suis pas l’auteur de bash, et ne fais que suivre la documentation sur les redirections de fonctions ! Tu ne peux pas changer une syntaxe bash pour la mettre à ton goût, et t’étonner que le résultat change.

Quant à la différence de comportement avec < ou < < , je n’en vois aucune si ce n’est que lors de l’enregistrement source .bashrc bash me signale : erreur de syntaxe

Voir et ne pas voir, c’est tout l’art du « En même temps », savoir caser dans la même phrase tout et son contraire, en espérant que personne ne s’en rendre compte. C’est même un métier, tout un apprentissage.
Bonne réflexion.

j’ai écrit une ânerie car , comme je le soupçonnais , ja faisais une erreur systématique dans mes comparaisons . En fait sans la 1ère redirection ça ne fonctionne pas . Mais j’aimerais bien savoir pourquoi elle est indispensable car la sortie de la substitution de processus pointe , me semble-t-il, vers stdin de la 1ère commande basename , si j’ai bien compris la fonction . Mais comme elle passe d’abord par un fichier temporaire à ce que j’ai pu lire … C’est loin d’être clair pour moi .

  • finalement le cours de l’IUT-Rodez que j’ai repris , justement à la fonction while , m’a fourni la réponse p 78 .
  • pour un éventuel lecteur aussi peu avancé que moi je rajoute ceci que je trouve assez clair :

<(...) alone is not a redirection; it’s a process substitution, that exposes the output of a command as if it were a file. the < between done and the process substitution is the redirection operator: it causes the while loop to use the process substitution as its standard input.
Everything inside the while loop inherits the loop’s standard input as its own, which is why each read command reads from the process substitution as well.

autrement dit : c’est comme ça que fonctionne une boucle while = c’est prévu pour .

Quant à la comparaison de répertoires c’est pour vérifier que lorsque je réalise des tranferts entre mon portable (la référence ) et mon ssd nomade et de sauvegarde je n’ai rien oublié en route . Tout sur l’informatique c’est pratique mais mieux vaut s’assurer qu’en cas de pépin on a bien tout sauvegardé correctement . C’est ce que j’essaie de faire à ma façon , artisanale certes , mais rien n’est immuable . Et lorsque je maîtriserai un peu mieux ssh j’essaierai de rendre ces contrôles automatiques avec l’aide de diff qui , si je lui donne les bonnes infos , n’oubliera rien lui . Pour ça diff -r , que je ne connaissais pas , m’a l’air au top . Chaque chose en son temps .

Donc, si finalement, ton besoin est de synchroniser des disques, rsync le fait parfaitement, mais les réglages sont chatouilleux, très chatouilleux, tu es prévénu, la commande est complexe avec une très longue liste d’options.
A connaître, l’option --dry-run, pour tester sans effectuer aucun transfert.
Utiliser un interface graphique sur rsync serait sûrement plus simple pour toi que de tripatouiller du bash, au moins pour démarrer et apprivoiser la bête.
Un outil super léger sur rsync: grsync.
A toi de voir.

1 J'aime

inutile d’aller plus loin ; au moins pour le moment . Je vais encore rester dans l’artisanat . C’est peut-être archaïque mais au moins je sais ce que je fais .

mais merci pour l’info , peut-être que dans une autre vie …

Je comprends très bien le plaisir de faire soi-même ce genre de script,
mais si le but est de comparer des répertoires, fichiers, etc,
midnight commander (mc) a déjà tout ce qu’il faut pour ça et même bien plus :
tu pourras très simplement comparer tes répertoires (et autres) entre un répertoire local et un distant et même avec le contenu d’un fichier archive de type zip, gzip, bzip, ISO, sans même avoir besoin de les décompresser.

1 J'aime

Ma première pensée en voyant ce nom = Lord Commander of the Night’s Watch . Comme quoi GOT m’a marqué .

Ceci dit je viens de survoler ce mc et ça m’a l’air intéressant . Reste à maîtriser l’affaire et donc à trouver un bon tutoriel . Le canard va me dénicher ça . Mais en parallèle je vais quand même continuer mes bricolages car je trouve ça très instructif : du en même temps en quelque sorte .

merci .

déjà une remarque : ouvrir un menu déroulant ( commande par exemple ) est quasi instatantané mais le fermer avec Échap ne l’est pas . Dommage , car même si 1s c’est court quand on est habitué à la quasi instantanéité ça ne passe pas inaperçu . Mais comme je n’ai pas encore lu de tuto … ça pourra peut-être se régler .

Je ne sais pas quel environnement de Bureau tu utilises, et donc pas non plus le nom du programme émulateur de terminal que tu utilises, mais sur la plupart de ces programmes émulateur de terminal, il faut désactiver les raccourcis utilisant les touches F10, F1 et autres.
Ci-dessous, c’est xfce4-terminal :
Capture d’écran_2022-11-16_13-53-24

Une fois ces raccourcis désactivés dans le terminal, quand tu auras lancé la commande mc tu pourras utiliser la touche F10 (plus efficace que la touche Échap) et tous les autres raccourcis clavier utilisés par midnight commander et le raccourci clavier F1 te permettra d’accéder à l’aide en ligne.

En attendant, tu peux toujours cliquer en bas et à droite de la fenêtre de midnight commander pour Quitter (le numéro de la touche de fonction est affiché juste avant)

Tu peux aussi cliquer sur Nom ou Taille ou Date de Modifi pour modifier l’ordre de tri des colonnes

je suis aussi dans l’environnement Xfce , que j’avais sélectionné avec autant de soin que Jacques Vabre le fait pour son café , et j’ai donc reproduit l’onglet « avancé » tel que je le vois : impeccable ! F10 est quasi instantané à la fermeture , non plus de mc , mais d’un menu déroulant .

Tant que j’y suis : aurais-tu un site à recommander qui explique les bonnes pratiques à mettre en œuvre pour réaliser une sauvegarde ? Parce que là aussi je dois être assez rudimentaire .

merci par avance .

À mon humble avis une sauvegarde dépends de l’importance que chacun attache à ses fichiers.

Je ne sauvegarde rien côté système car de nos jours, installer un système ne prend même pas une heure, je ne sauvegarde que mes données personnelles au format texte brut ou éventuellement au format texte CSV de façon à ce qu’ils ne dépendent pas d’une application spécifique, ce qui fait que j’ai besoin de très peu d’espace pour les sauvegarder, et il me suffit de les compacter au format gzip et d’en faire plusieurs copies sur des supports différents.

je viens d’affecter un portable déjà ancien et poussif lorsque j’en ai hérité ( anciennement W10 ) à la fonction « sauvegarde » : j’aurai donc 2 supports indépendants pour sauvegarder tout ce qui est personnel + quantitté de documents téléchargés depuis des années .

notes :

  • lorsque j’ai viré W 10 et installé ( debian 11 / Xfce ) il galopait presque .
  • je vais adopter midnight commander car rien que cette présentation en face à face de 2 arborescences différentes et indépendantes est vraiment intéressante ,. Couplée aux opérations courantes sur les fichiers et les répertoires il risque vite de devenir indispensable . Tout comme la commande less que tu m’avais recommandée l’est devenue . De plus son aide , facile à utiliser , est probablement le meilleur des tutoriels , ce qui n’est malheureusement pas toujours le cas .

Voilà comment j’utilise mc pour pouvoir y copier de fichiers sur un système distant par ssh


Je lance la commande mc
2022-01-27_00-20-52

J’appuie sur la touche Tab pour passer le curseur dans le panneau de droite (parce que j’ai envie …)
(mais tout ce que je fais dans mc avec le clavier peut aussi être fait avec la souris)
2022-01-27_00-21-04

J’appuie sur F9 puis D puis sur H, ou alors je me balade avec les touches flèches
pour sélectionner Lien Shell
2022-01-27_00-21-23

Je saisis le nom de login suivi de @ puis de l’adresse IP (ou bien son nom sur le réseau) du système distant
puis (mais ce n’est pas indispensable)
un caractère deux points suivi du chemin où je veux aller sur le système distant
2022-01-27_00-21-48

Après validation, je me retrouve dans mon shell
où on me demande d’entrer le mot de passe pour établir la connexion ssh
(Si j’avais configuré une authentification par clef, j’aurais été dispensé de cette contrainte.)
2022-01-27_00-22-12

Me voilà connecté, avec, dans le panneau de gauche les fichiers de ma machine locale,
et dans le panneau de droite, ceux du système distant connectée par ssh
2022-01-27_00-23-00

En appuyant sur la touche Tab, je déplace mon curseur sur l’autre panneau
puis, avec les flèches je positionne le curseur sur le premier répertoire à transférer
et je tape Ctrl-T pour Taguer/dé-Taguer les répertoires ou/et les fichiers à transférer
2022-01-27_00-23-24

Une fois tagués, je lance la copie en appuyant sur F5
2022-01-27_00-23-57

Une boîte de dialogue me présente ce qui va être fait
et me propose de Valider
2022-01-27_00-24-25

Je valide, et la copie commence
la barre de progression du haut indique la progression du transfert du fichier en cours de copie
et celle du bas, la progression du transfert de tout l’ensemble des fichiers et répertoires à copier
2022-01-27_00-25-07

1 J'aime

Vous oublier qu’il a des esprits tordus qui, inspirés par la Révolution française, vont tester la robustesse de cette fonction en tapant

T='/tmp/-Rf Danton & Robespierre' lsrep

En tout cas merci pour le /bin/ls -A1 cela m’a permis de voir qu’il faut faire le ménage dans $HOME

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Il est souvent trop tôt pour savoir s’il n’est pas trop tard. »
Pierre Dac

« Rien ne sert de penser, faut réfléchir avant. »
Pierre Dac

Bonsoir,

Personnellement j’opterais pour Rsync : le meilleur des systèmes de sauvegarde dont j’ai écris une documentation il y a longtemps.

rsync est très compréhensible.

Pour faire une synchronisation de 2 répertoires - sur la même machine - entre 2 disques par exemple.

rsync -av source destination

Ici entre 2 machines (avec l’option -e "ssh" (très, très important) pour faire passer rsync dans le protocole SSH donc, pour que personne ne puisse sniffer ton mot de passe)

rsync -av -e "ssh" source destination 

Certes, il n’y a pas la comptabilisation des répertoires/fichiers, nic de coleurs mais pour faire de bonnes sauvegarde c’est le meilleur :wink:


En tout cas super fil, discussion, moi aussi j’ai appris de bonnes choses - Une adresse de @MicP entre autres :face_with_raised_eyebrow: :rofl: :blush:

Bonne nuitée, journée, tout çà… continuation etc.

:wink:

Salutations,
Romain

je viens de tester cette fonction de mc et le résultat , de mon point de vue , est sans appel : mc est nettement plus agréable et rapide que le protocole scp que j’utilisais . En particulier :

  • pas de ligne de commande à écrire
  • fichier ou répertoire , pas de distinction à faire et on peut les transférer dans la foulée
  • résultat visible sur le même écran .

Rien que pour ça , du moins en ce qui me concerne , ce logiciel est un bon invetissement .

Note 1 : à propos de rsync :

rsync est très compréhensible.

vs

rsync le fait parfaitement, mais les réglages sont chatouilleux, très chatouilleux, …, la commande est complexe avec une très longue liste d’options.

Pas pour l’instant , mais à terme , j’essaierai de voir laquelle de ces 2 opinions me correspond le mieux .

Note 2 : à propos du tutoriel sur rsync
il est indiqué ceci :

Publication : : Jeudi 17 novembre 2005

Modification : Mardi 26 juin 2012

depuis rsync a certainement subi des évolutions , tenter d’utiliser un tutoriel aussi ancien est peut-être un peu risqué pour un néophyte , non ?

C’était pour chatouiller @Verner - @zao seulement.

cooL … c’est sympat rsync :slight_smile:

Oui, je connais et utilise rsync depuis 2005 - J’avais écris un mémo - avec une petite introduction pour expliquer la force de ce système de sauvegarde - En 2012, j’ai dû ajouter/changer le script complet en écrivant un code plus propre et plus complet que seulement l’introduction de type rysync -av dir_source dir_destination

Non, je ne sais même pas s’il ont ajoutés de fonctionnalités.
L’important c’est de toujours avoir la documentation officielle et de bien visualiser/comprendre les fonctionnalités des options.

Comme avec toutes les commandes linux tu peut demander les man pages - par exemple : man rsync


tu pourrais essayer de créer un dossier et y coller un fichier ou 2, un répertoire ou 2 (oOops* j’ai oublié --delete (par default rsync n’efface rien)" :

NdMoi-même 15h50 → oOops j’ai oublié --delete (par default rsync n’efface rien)
donc il faut ajouter l’option --delete dans les requête rsync pour supprimer les fichiers supprimés
:rofl:

#--------------------------------------------
# créer le dossier de sauvegarde
mkdir /tmp/ma_sauvegarde/

#--------------------------------------------
# créer un dossier que tu souhaiterais synchroniser 
mkdir /tmp/nouveau_dossier/

# créer un fichier vide
touch /tmp/nouveau_dossier/nouveau_fichier

# écrire "salut" dans le nouveau fichier
echo salut > /tmp/nouveau_dossier/nouveau_fichier

# Tester une première synchro :
rsync -av /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde a fonctionné
ls -l /tmp/ma_sauvegarde/

#--------------------------------------------
# ajouter un autre fichier dans le répertoire à synchroniser 
touch /tmp/nouveau_dossier/nouveau_deuxieme_fichier

# Lancer la synchro :
rsync -av /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde (synchro) a fonctionné
ls -l /tmp/ma_sauvegarde/

#--------------------------------------------
# modifier le 1er fichier avec un "salut" dedans et y ajouter "modification du fichier"
echo "modification du fichier" >> /tmp/nouveau_dossier/nouveau_fichier

# Lancer la synchro :
rsync -av  /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde (synchro) a fonctionné
cat  /tmp/ma_sauvegarde/nouveau_fichier

#--------------------------------------------
# on peut continuer
# supprimer le 2e fichier vide par exemple
rm -v /tmp/nouveau_dossier/nouveau_deuxieme_fichier

# Lancer la synchro (avec un delete comme je disais dans ma note plus haut) :
rsync --delete -av  /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde (synchro) a fonctionné
ls -l /tmp/ma_sauvegarde/

etc…

Dans le tuto que j’ai écris, justement, j’explique comment utiliser les options rynsc --backup --backup-dir pour qu’en plus de réaliser, seulement, une synchronisation de répertoires,
faire une sauvegarde des fichiers modifier ou supprimer → que si par erreur tu ne souhaitais pas supprimer le fichier /tmp/nouveau_dossier/nouveau_deuxieme_fichier celui-ci aurait été déplacé de /tmp/ma_sauvegarde/nouveau_deuxieme_fichier vers /tmp/ma_sauvegarde-2022-11-18/nouveau_deuxieme_fichier

Et que dans le répertoire de la synchronisation/sauvegarde « courante » → celui-ci /tmp/ma_sauvegarde/ ton fichier ni soit plus.
Pour que le répertoire /tmp/nouveau_dossier/ et le répertoire /tmp/ma_sauvegarde/ soit « équivalent ».
Mais par précaution, toutes modifications ou suppression de fichiers du répertoire /tmp/nouveau_dossier/ soit placées dans un répertoire de sauvegarde /tmp/ma_sauvegarde-2022-11-18/ :slight_smile:

:wink:


une fois que tu as compris le texte de mon explication, tu peut essayer çà → l’option --backup :

# tu re-crées un autre nouveau fichier dans ton répertoire "courant"
touch /tmp/nouveau_dossier/mon_autre_fichier

# Lancer la synchro :
rsync -av  /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde (synchro) a fonctionné - tu as tes 2 fichiers.
ls -l /tmp/ma_sauvegarde/

# puis après tu essaies les options rysync --backup en plus
rsync --backup --backup-dir=/tmp/ma_sauvegarde-2022-11-18/ -av  /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde a fonctionné
ls -l /tmp/ma_sauvegarde/

# rien n'a changé puisque tu n'as rien modifié.
# donc, modifie le fichier en écrivant quelque chose dedans.
echo "modification du fichier mon_autre_fichier" > /tmp/nouveau_dossier/mon_autre_fichier

# Lancer la synchro avec le BACKUP supplémentaire et le delete (maintenant que l'on a un dossier de sauvegrade au cas où) :
rsync --backup --backup-dir=/tmp/ma_sauvegarde-2022-11-18/ --delete -av  /tmp/nouveau_dossier/  /tmp/ma_sauvegarde/

# vérifier que la sauvegarde a fonctionné (donc il y écrit "modification du fichier mon_autre_fichier" dans le fichier qui se trouve dans ton répertoire "ma_sauvegarde"
cat /tmp/ma_sauvegarde/mon_autre_fichier

# Vérifier que la sauvegarde a fonctionnée avec seulement le fichier vide "mon_autre_fichier" :
ls -l /tmp/ma_sauvegarde-2022-11-18/

etc.

Tu pourrais supprimer ton fichier /tmp/nouveau_dossier/mon_autre_fichier et lancer une synchro avec l’option de backup et tu t’apercevras que le fichier a été supprimé de ton répertoire « ma_sauvegarde » et qu’il à été déplacé dans le répertoire « ma_sauvegarde-2022-11-18 » avec la dernière synchro effectuée, donc il contient le texte « modification du fichier mon_autre_fichier ».

:wink:

Bonne journée à vous.

Romain

salut
merci pour ton post
ce serait bien de vérifier les possibles obsolescences si tu proposes ce lien.
Ca te fera réviser :slight_smile:

A propos de rsync : j’aime bien grsync ( gui rsync ) qui à l’avantage de donner la commande rsync qu’il utilise avec les options, donc utilisable sans gui

Y’a pas d’obsolescence dans ma doc rysnc !

Romain

Ce qui est super avec rsync c’est que çà garde la date exacte des fichiers → sur le répertoire de sauvegarde (contrairement à FTP ou SCP par exemple).

Et que, si tu as beaucoup de fichiers dans le répertoire à synchroniser (et qu’il y a un problème par exemple) → la synchronisation (en relançant la commande) reprendrait au dernier fichier (ne récupère pas tous les fichiers du répertoire), donc ceux déjà télécharger qui sont identique ne sont plus jamais envoyer dans le répertoire de sauvegarde.

Ça évite de galérer tous les jours, en récupérant seulement les nouveaux fichiers ou ceux modifiés et pas toute l’arborescence.

:slight_smile:

J’ai modifie mon message en remplaçant le lien web par une copie du contenu de la page web.