Question sur test dossier présent ET vide

le ~ (tilde) n’est pas développé entre guillemets.corbeille=~/".local/share/Trash/files"

ou utilise $HOME.

ps: je ne suis pas certain que le tilde soit portable.

[quote=“Watael”]le ~ (tilde) n’est pas développé entre guillemets.corbeille=~/".local/share/Trash/files"

ou utilise $HOME.

ps: je ne suis pas certain que le tilde soit portable.[/quote]
Bingo :023

[code]CONTENU de la CORBEILLE

LA CORBEILLE EST VIDE
prêt pour la sauvegarde ? o/* :[/code]

J’ai essayé avec le chemin complet et ça a fonctionné.
Mais comme je sais que le tilde est portable car je m’en suis déjà servi. J’ai donc fait comme tu préconises : le sortir des guillemets. Le résultat a été tout aussi concluant.

Une interrogation :
différence entre &> et 2> ?
faut-il laisser un espacement entre &> et /dev/null ?

&> fichier est équivalent à > fichier 2>&1

Encore une, totalement folle :
Dans le cas de
– corbeille déjà vide
– absence (pour raison quelconque) du dossier …/files
le test ne fonctionne pas et on a comme retour

[code]CONTENU de la CORBEILLE

ls: impossible d’accéder à /home/ricar… Aucun fichier …
on peut la vider ? o/* :[/code]
Réponse tout à fait logique puisqu’il ne trouve pas le dossier …/files.
Vous me direz qu’il faut être particulièrement tordu pour supprimer ce dossier et que donc on ne devrait pas se soucier de ça. Ce n’est pas comme si ce dossier avait été créé pour l’occasion. D’autant plus qu’il est régénéré, s’il y a lieu, à chaque nouvelle “mise à la poubelle”.
MAIS, dans ce cas, il n’y a ptet pas utilité de conserver la première partie du test :
if [ -d “$corbeille” ] && [ -z $(ls -A “$corbeille”) &> /dev/null ]

:question: :question: :question:

Bonjour,

[quote=“syam”]
Il faut supprimer à la fois les fichiers normaux (*) et les fichiers cachés (.*).
Accessoirement, la redirection 2>/dev/null dans les cas .* évite que des messages d’erreur ne s’affichent sur la console concernant les répertoires . et (dont on se contrefout).

rm -rf ~/.local/share/Trash/files/* rm -rf ~/.local/share/Trash/files/.* 2>/dev/null rm -rf ~/.local/share/Trash/info/* rm -rf ~/.local/share/Trash/info/.* 2>/dev/null[/quote]

Tout cela peut être simplifié en :

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

Maintenant, puisque l’on utilise bash, je préfère utiliser les outils du bash pour effectuer la demande originale :

dossier="quelquechose"
{ compgen -o dirnames "${dossier%/}" && ! compgen -o default "${dossier}/" ; } >/dev/null && printf "%s est un dossier et est vide.\n" "${dossier}"

Surtout que cela permet d’avoir la définition de “dossier” comme ceci : dossier="~/tmp/“
et non comme ceci : dossier=~”/tmp"

–> man bash|less +/“compgen [”

Enfin, pour répondre au cas particulier évoqué par ricardo :
cela vient du fait que le dossier ~/.local/share/Trash/files n’existe pas
du coup, lors du test if [ -z $(ls -A ~/.local/share/Trash/files 2>&1) ] “ls” écrit sur la sortie d’erreur et celle-ci étant redirigée vers la sortie standard alors le texte testé par -z est négatif. Le dossier est donc considéré comme non vide.

Ensuite, tu affiches le contenu d’un dossier inexistant avec ls… il y a donc le message que tu obtiens.
le test -d est donc nécessaire mais il faut revoir la structure du bloc. (j’ai pas encore lu le fil concerné, donc je m’abstiens de toute proposition ici)

Étant donné que ce fil commençait à être trop brouillon, j’en ai ouvert un autre qui traite d’un seul “bloc” :
"Pour en finir avec le bloc “corbeille”.
Mieux vaut, il me semble, laisser celui-là de côté et pratiquer par élimination.
Une fois terminé et “accepté” le bloc “corbeille”, on reprendra l’ensemble pour voir s’il y a lieu de modifier un autre “bloc”.