#1 Le 19/01/2022, à 16: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
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, à 19:28)
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#2 Le 19/01/2022, à 16: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
Dernière modification par iznobe (Le 19/01/2022, à 16:15)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#3 Le 19/01/2022, à 16: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
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#4 Le 19/01/2022, à 17:07
- nany
Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]
Bonjour,
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.
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
En ligne
#5 Le 19/01/2022, à 19: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ébuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#6 Le 19/01/2022, à 19:26
- iznobe
Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]
la commande que j' ai proposée n ' est pas :
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, à 19:27)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#7 Le 19/01/2022, à 19: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ébuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#8 Le 19/01/2022, à 20: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
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#9 Le 19/01/2022, à 23:33
- Watael
Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]
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 19/01/2022, à 23:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#10 Le 20/01/2022, à 01: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ébuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#11 Le 20/01/2022, à 02: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, à 07: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, à 07:32)
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne
#13 Le 20/01/2022, à 21: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, à 22:02)
Débuter ⋅ Doc ⋅ Bien rédiger ⋅ Retour commande ⋅ Insérer image | illustrations & captures d'écran < ⋅ >
Hors ligne
#14 Le 20/01/2022, à 22:07
- nany
Re : Effacer fichiers d'un certain nom parmi plusieurs dossiers [résolu]
ou, autrement dit, c'est quoi l'intérêt de la boucle ici ?
Aucun intérêt, find étant récursif.
En ligne
#15 Le 20/01/2022, à 23: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
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne