Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/01/2022, à 17:01

Coeur Noir

Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Hello,

vous pouvez vous moquer, j'ai très peu de connaissances en bash / script lol

Je plante un peu le décor : j'ai un serveur « stockage » qui contient les data de plusieurs utilisateurs, synchro entre diverses machines.
+ ailleurs, un archivage / sauvegarde versionné de ces data.

Je m'aperçois aujourd'hui que j'ai une quantité assez importante de fichiers « .~lock.document.od×# », parfois très anciens, qui traînent un peu partout chez les utilisateurs.
Ces fichiers proviennent de LibreOffice - dès qu'on ouvre un document, pour empêcher des utilisations concurrentes.

Je sais plus ou moins pourquoi ces fichiers ~lock sont encore là : paramètres samba qui avaient un temps exclu les fichiers cachés, paramètres de synchro qui un temps ne laissaient pas le temps de voir que les ~lock avaient été dûment effacés.

Bref, je voudrais les effacer, ils ne servent plus à rien.

Je sais les lister, genre :

find /dossier -iname ".~lock.*"

et en gros je voudrais donner à

rm

cette liste à effacer.

C'est quoi le plus « propre » dans ce cas ?
L'utilisateur qui lancera cette commande a bien sûr le droit d'écriture dans tous les (sous-)dossiers en question.

Dernière modification par Coeur Noir (Le 19/01/2022, à 20:28)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#2 Le 19/01/2022, à 17:12

iznobe

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Bonjour , je dirais simplement :

rm -ri ~lock*

afin de confirmer manuellement et visualiser ce que tu effaces en mode recursif .
sans le " i " pour foncer les yeux fermes tongue

Dernière modification par iznobe (Le 19/01/2022, à 17:15)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#3 Le 19/01/2022, à 17:28

Coeur Noir

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Euh… attends, j'ai essayé ça et ça n'avait pas l'air d'aller bien profond.

Je vais re-vérifier - ça se trouve j'étais pas au bon endroit lol


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#4 Le 19/01/2022, à 18:07

nany

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Bonjour,



Coeur Noir a écrit :

Je sais les lister, genre :

find /dossier -iname ".~lock.*"

Alors y a plus qu’à mettre l’option -delete si tu es sûr de la liste.

man find a écrit :
   ACTIONS
       -delete
              Delete  files; true if removal succeeded.  If the removal failed, an error message is issued.  If -delete fails, find's exit status will be nonzero (when it eventually exits).  Use of -delete
              automatically turns on the `-depth' option.

              Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below  the  starting  points  you  specified.
              When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid later surprises.  Because -delete implies -depth, you cannot
              usefully use -prune and -delete together.

              Together with the -ignore_readdir_race option, find will ignore errors of the -delete action in the case the file has disappeared since the parent directory was read: it will  not  output  an
              error diagnostic, and the return code of the -delete action will be true.

Donc :

find /dossier -iname ".~lock.*" -delete

Hors ligne

#5 Le 19/01/2022, à 20:17

Coeur Noir

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Ok.

Je confirme que même placé au bon endroit :

palace0@POSEO-SRV:/home$ rm -ri .~lock.*
rm: impossible de supprimer '.~lock.*': Aucun fichier ou dossier de ce type
palace0@POSEO-SRV:/home$ rm -ri ".~lock.*"
rm: impossible de supprimer '.~lock.*': Aucun fichier ou dossier de ce type

ne fait rien.

Par contre

find /home -iname ".~lock.*" -delete

a effacé exactement ce que je voulais.

Merci bien !


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#6 Le 19/01/2022, à 20:26

iznobe

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

la commande que j' ai proposée n ' est pas :

Coeur Noir a écrit :

Ok.

Je confirme que même placé au bon endroit :

palace0@POSEO-SRV:/home$ rm -ri .~lock.*
rm: impossible de supprimer '.~lock.*': Aucun fichier ou dossier de ce type
palace0@POSEO-SRV:/home$ rm -ri ".~lock.*"
rm: impossible de supprimer '.~lock.*': Aucun fichier ou dossier de ce type

ne fait rien.

mais :

rm -ri ~lock*

j ' ai tester chez moi cela fonctionne et demande confirmation avec le nom complet pour chaque fichier a effacer .

Dernière modification par iznobe (Le 19/01/2022, à 20:27)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#7 Le 19/01/2022, à 20:49

Coeur Noir

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

bah sans doute mais les fichiers en question chez moi s'appellent bien

.~lock.quelquechose.od×#

avec le point au début car cachés, et se trouvent dans divers (sous-)dossiers de /home/…

Le point est interprété comme un début de chemin dans un cas, ok.
Mais avec les guillemets ça aurait du passer, non ?


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#8 Le 19/01/2022, à 21:47

iznobe

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

meme sans les guillemets ca aurait du passer , curieux dans ce cas . mais le probleme etant resolu bien plus elegamment par @nany , tout va bien wink


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#9 Le 20/01/2022, à 00:33

Watael

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Coeur Noir a écrit :

Mais avec les guillemets ça aurait du passer, non ?

non.
parce que les guillemets inhibent le comportement de l'astérisque., qui initie un Remplacement des chemins.
par contre, il faut des guillemets (ou des apostrophes) autour des motifs passés à find pour que ce soit lui, find, qui les interprète, et pas le shell.

le point, lui, est interprété comme un point, et donc commençant un nom de fichier (les répertoires sont des fichiers particuliers), si il n'est pas suivi d'un autre point (répertoire parent), d'une barre oblique ou rien (répertoire courant).

Dernière modification par Watael (Le 20/01/2022, à 00:35)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#10 Le 20/01/2022, à 02:45

Coeur Noir

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Ok.
Alors pourquoi :

palace0@POSEO-SRV:/home$ rm -ri .~lock.*
rm: impossible de supprimer '.~lock.*': Aucun fichier ou dossier de ce type

alors qu'au même moment

find /home -iname ".~lock.*"

me listait des douzaines de fichiers ? ( parmi plusieurs sous-dossiers de /home, et plusieurs sous-dossiers de ces sous-dossiers ).

Il semble que

rm -ri chose

ne va pas plus loin que le dossier actuel :

django@ASGARD:~/Bureau/Z$ find . -iname ".v*"
./Y/.v.txt
./W/.v.txt
./.v.txt
django@ASGARD:~/Bureau/Z$ rm -ri .v.*
rm : supprimer '.v.txt' du type fichier vide ? o
django@ASGARD:~/Bureau/Z$ find . -iname ".v*"
./Y/.v.txt
./W/.v.txt
django@ASGARD:~/Bureau/Z$ 

seul le fichier
.v.txt dans le dossier Z a été vu puis supprimé par rm
Normal : rm ne supprime pas les dossiers, sauf avec -r qui supprimera le dossier visé et tout son contenu ( en effaçant d'abord les fichiers, puis le dossier parent qui les contenait ).

django@ASGARD:~/Bureau/Z$ rm -ri W
rm : descendre dans le répertoire 'W' ? o
rm : supprimer 'W/.v.txt' du type fichier vide ? o
rm : supprimer 'W' du type répertoire ? o
django@ASGARD:~/Bureau/Z$ find . -iname ".v*"
./Y/.v.txt
django@ASGARD:~/Bureau/Z$ 

Et c'est justement pas ça que je voulais faire, c'était bien juste virer les fichiers obsolètes, surtout pas leurs dossiers parents.

Merci tous les 3 pour ces éclaircissements. Et histoire de faire complètement le tour, retour à la situation initiale :

django@ASGARD:~/Bureau/Z$ find . -iname ".v*"
./Y/.v.txt
./W/.v.txt
./.v.txt
django@ASGARD:~/Bureau/Z$ find . -iname ".v*" -delete
django@ASGARD:~/Bureau/Z$ ls
W  Y
django@ASGARD:~/Bureau/Z$ find . -iname ".v*"
django@ASGARD:~/Bureau/Z$

…plus de fichiers .v.txt mais les dossiers sont toujours là.

Faudra que je m'intéresse à find davantage.
Genre comment lister des dossiers qui s’appelleraient top-secret pour les effacer ?
Ou juste trouver les dossiers vides…


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#11 Le 20/01/2022, à 03:20

Watael

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

tu as bien compris.
malgré l'option de récursivité, rm ne descend pas dans les sous-dossiers quand on lui donne un nom de fichier.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 20/01/2022, à 08:31

iznobe

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Bonjour , pour trouver et effacer les dossiers vides :

for i in **/*; do find . -type d -empty -print -delete ; done"

pour trouver les dossiers vides :

for i in **/*; do find . -type d -empty -print ; done"

voir ce lien : https://forum.ubuntu-fr.org/viewtopic.p … #p22519739 qui peut etre peut t ' interresser .

Dernière modification par iznobe (Le 20/01/2022, à 08:32)


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#13 Le 20/01/2022, à 22:59

Coeur Noir

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Oui merci Iznobe, j'avais déjà un peu regardé cette discussion mais n'étant pas à l'aise avec bash, script et compagnie, je ne fais que ça, regarder.

Mmm… on peut pas se contenter de

find /dossier -type d -empty -delete

ou, autrement dit, c'est quoi l'intérêt de la boucle ici ?

Désolé si ça paraît évident, je ne comprends pas **/* par exemple.

Dernière modification par Coeur Noir (Le 20/01/2022, à 23:02)


DébuterDocBien rédigerRetour commandeInsérer image | illustrations & captures d'écran <>

Hors ligne

#14 Le 20/01/2022, à 23:07

nany

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Coeur Noir a écrit :

ou, autrement dit, c'est quoi l'intérêt de la boucle ici ?

Aucun intérêt, find étant récursif.

Hors ligne

#15 Le 21/01/2022, à 00:46

iznobe

Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]

Bonjour , dans ce cas , ce code fonctionne recursivement et supprime donc tous les repertoires vides en descendant dans l' arborescence :

find /dossier -type d -empty -delete

?
Du coup je vais modifier le script de modification des noms sambas .

Merci pour l' info wink


retour utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne