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 12/09/2010, à 09:49

Christophe C

effacer un rep caché en ligne de commande

Bonjour,

Dans un script, j'ai une ligne qui vide la corbeille : rm -rf ~/.local/share/Trash/files/*. Sauf qu'apparement, si j'ai effacé un répertoire caché (.thunderbird, en l'occurence), le rep caché transféré dans la corbeille n'est pas effacé. Tout le reste l'est.

Donc je suppose que rm -rf ~/.local/share/Trash/files/* n'efface pas les rep cachés? Quelqu'un a une solution ?

Dernière modification par Christophe C (Le 12/09/2010, à 09:55)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#2 Le 12/09/2010, à 10:18

Compte anonymisé

Re : effacer un rep caché en ligne de commande

Salut

Peut être un :
rm -R ~/.local/share/Trash/files
suivi d'un :
mkdir ~/.local/share/Trash/files

@+

#3 Le 12/09/2010, à 10:34

chopinhauer

Re : effacer un rep caché en ligne de commande

Par défaut le glob '*' ne donne pas les fichiers qui commencent par un point. Tu peux changer ce comportement avec l'option shell dotglob dans ton script:

shopt -s dotglob

Mets les deux commandes dans (une seule) parenthèse si tu veux que l'option ne s'applique pas au reste du script.

Remarque: le glob '.*' donne bien les fichiers cachés, mais aussi les deux sous-répertoires spéciaux '.' et '..' et tu ne veux pas que ceux-là soient inclus.

Dernière modification par chopinhauer (Le 12/09/2010, à 19:34)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#4 Le 12/09/2010, à 10:42

alej

Re : effacer un rep caché en ligne de commande

Si on veut faire propre - et pas compliqué - on peut aussi utiliser "empty-trash" du paquet trash-cli big_smile

Hors ligne

#5 Le 12/09/2010, à 18:51

Christophe C

Re : effacer un rep caché en ligne de commande

Merci à tous.

Heu... j'ai rien compris du tout lol Sauf l'idée de jeanjd63, que j'avais eu, mais je trouvais cela brutal.

Concrètement, ma ligne de script complète pour effacer le contenu, y compris les fichiers caché devient quoi ?

Et c'est quoi,  glob (j'ai fait man glob, mais j'ai pas capté grand chose. Cela devient trop technique pour moi) ?

Dernière modification par Christophe C (Le 12/09/2010, à 19:01)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#6 Le 12/09/2010, à 19:16

chopinhauer

Re : effacer un rep caché en ligne de commande

Christophe C a écrit :

Concrètement, ma ligne de script complète pour effacer le contenu, y compris les fichiers caché devient quoi ?

(shopt -s dotglob; rm -rf ~/.local/share/Trash/files/*)

Avec ou sans parenthèses, mais si t'en met pas les autres utilisations de '*' dans le script seront influencés.

Christophe C a écrit :

Et c'est quoi, un glob ?

C'est une expression (une chaîne de caractères) pour décrire un ensemble de chaînes possibles. Le monde UNIX a deux genres de telles expressions: les glob qui sont assez primitifs et les expressions régulières (regex) bien plus puissantes.

L'expression '*' est un glob, que la shell remplace par la liste de fichiers qui respectent les glob (et cela avant d'exécuter rm).

Edit: les globs UNIX sont bien plus puissants que les wildcards DOS. Par exemple '.[^.]*' te donnera tous les fichiers dont le nom commence par '.', a au moins deux caractères et le deuxième n'est pas '.'. Donc

rm -rf ~/.local/share/Trash/files/{*,.[^.]*,..?*}

fera presque la même chose que le code précédent, mais affichera souvent des erreurs. L'expression titi{a,b,c} sera remplacée par 'titia titib titic'.

PS: je déconseille la deuxième méthode, car si on fait la plus petite erreur, on risque d'inclure '.' et '..' dans les paramètres de 'rm -rf' et cela effacera le répertoire ~/.local/share/Trash/files et ~/.local/share/Trash. Si tu fais cette erreur en effaçant le répertoire maison d'un utilisateur tout /home partira!

Dernière modification par chopinhauer (Le 12/09/2010, à 19:34)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#7 Le 12/09/2010, à 20:34

alej

Re : effacer un rep caché en ligne de commande

C'est pas dramatique mais au delà du problème du dot, ta commande ne vide pas vraiment la corbeille...

$ tree -a .local/share/Trash/
.local/share/Trash/
├── expunged
├── files
└── info

3 directories, 0 files
$ touch .toto .titi
$ gvfs-trash .toto .titi
$ tree -a .local/share/Trash/
.local/share/Trash/
├── expunged
├── files
│   ├── .titi
│   └── .toto
└── info
    ├── .titi.trashinfo
    └── .toto.trashinfo

3 directories, 4 files

Alors qu'avec empty-trash...

$ empty-trash
$ tree -a .local/share/Trash/
.local/share/Trash/
├── expunged
├── files
└── info

3 directories, 0 files

Acessoirement, tu peux moduler l'effacement en fonction de l'âge des fichiers. Et comme en +, c'est pas compliqué à utiliser... big_smile

Hors ligne

#8 Le 12/09/2010, à 21:22

nesthib

Re : effacer un rep caché en ligne de commande

@alej : tu as modifié quelque chose pour que tree affiche des branches plus jolies que des |--- ?


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#9 Le 12/09/2010, à 21:43

chopinhauer

Re : effacer un rep caché en ligne de commande

nesthib a écrit :

@alej : tu as modifié quelque chose pour que tree affiche des branches plus jolies que des |--- ?

Probablement il y a un alias tree='tree --charset utf8' ou tree='tree -A', les caractères que tu vois dans son message sont du Code page 437 qui contient des signes graphiques. Unicode contient ces symboles aussi, donc '--charset utf8' dans un terminal UTF-8 marche bien.

Dernière modification par chopinhauer (Le 12/09/2010, à 21:58)


Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.

Hors ligne

#10 Le 12/09/2010, à 21:50

alej

Re : effacer un rep caché en ligne de commande

nesthib a écrit :

@alej : tu as modifié quelque chose pour que tree affiche des branches plus jolies que des |--- ?

J'voudrais bien te répondre oui mais ... non. Ça se produit à l'insu de mon plein gré big_smile

Hors ligne

#11 Le 12/09/2010, à 21:52

nesthib

Re : effacer un rep caché en ligne de commande

merci beaucoup pour ta réponse, c'est vrai que je n'avais pas pensé qu'il puisse avoir utilisé un alias ^^
(sinon pour l'unicode j'avais bien compris tongue)


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne