2017-07-27 4 views
3

J'ai de grands projets et quelques scripts pour les compiler. Je ne peux pas ajouter tout le code ici, donc je vais essayer de simplifier le problème: dans la partie nettoyage, j'ai besoin de nettoyer le dossier nommé directory qui contient un autre répertoire nommé innerDir. J'ai cette commande bash pour le nettoyage directory:rm -r -f ne supprime pas le dossier interne

clean: 
    rm -r -f directory 

Lorsque le répertoire est un dossier que j'ai créé avec mkdir -p au préalable. Quand je nettoie, je reçois cette erreur:

rm: cannot remove 'directory': Directory not empty 

Mais quand j'essaie d'entrer directory, je vois qu'il est vide. Donc, pour le débogage, j'ai modifié ma part cleanning être:

rm -r -f directory/* 
find directory 
rmdir directory      

(il est supposé faire la même chose, mais ici je reçois aussi la chance de voir si tout le contenu de directory a été vraiment supprimé).
Maintenant, j'obtiens cette erreur:

find: 'directory/innerDir': Permission denied 

Il y a deux choses que peu claires pour moi ici:
(1). innerDir a été créé avec makedir -p avant la partie clening, sans aucune modification des autorisations de celui-ci plus tard dans le code. Pourquoi n'ai-je pas la permission de le supprimer?
(2). Si j'essaye de nettoyer à nouveau, le nettoyage réussit et je n'ai aucun problème de permission. Donc, si j'ai eu une erreur de permission la première fois que j'ai essayé de la supprimer, pourquoi ne l'aurais-je pas dans un deuxième temps?

+1

Courez-vous vos commandes avec sudo? –

+0

@RamanSailopal - no. Pourquoi ai-je besoin de courir avec sudo? – Rodrigo

+0

J'utiliserai '-rm -r -f directory' dans la cible' clean'. Même si 'rm' échoue, make continuera. Juste une solution de contournement – dlmeetei

Répondre

1

Si vos autorisations sont valides dans l'arborescence, rm -fr directorydevrait fonctionner.

Si vous n'avez pas accès en lecture sur innerDir, est-il possible/probable (en fonction des processus en cours, peut-être) que quelque chose a écrit dans innerDir, mais le fichier est nettoyé? Pouvez-vous donner des exemples d'autorisations, de propriété et une certaine étendue des opérations qui se déroulent entre chaque étape?

Pourriez-vous renommer le dossier parent tout en travaillant, et/ou verrouiller ses autorisations pour empêcher d'autres utilisateurs ou processus de modifier des choses?