rm -rf /some/path/*
supprime tous les fichiers non cachés de ce répertoire (et de ses sous-répertoires).
rm -rf /some/path/.*
supprime tous les fichiers cachés dans ce répertoire (mais pas les sous-répertoires) et génère également l'erreur / avertissement suivant:
rm: cannot remove directory: `/some/dir/.'
rm: cannot remove directory: `/some/dir/..'
Quelle est la bonne façon de supprimer tous les fichiers et dossiers cachés et non cachés dans un répertoire cible sans recevoir l'avertissement / l'erreur concernant .
et ..
?
rm ..?* .[!.]*
devrait le faire).*
correspond à tous les fichiers.[!.]*
autres que les fichiers à points , à tous les fichiers à points sauf les.
fichiers dont le nom commence par..
, et à..?*
tous les fichiers à points excepté..
. Ensemble, ils correspondent à tous les fichiers autres que.
et..
. Si l’un de ces trois modèles ne correspond à rien, il se développe;rm -f
ne se soucie pas des arguments inexistants, donc cela n'a pas d'importance.Vous pouvez également utiliser
find
. Ceci est plus complexe mais présente l'avantage de fonctionner même s'il y a tellement de fichiers que les caractères génériques ci-dessus s'étendent au-delà de la limite de longueur de ligne de commande de votre système.Vous trouverez peut-être plus clair de supprimer et de recréer le répertoire. Cela présente l'avantage (ou l'inconvénient, selon le cas) de créer un répertoire vide, même si un autre programme crée simultanément des fichiers dans le répertoire d'origine.
la source
find
alternative renvoie «success» même si certains fichiers ne sont pas supprimés avec succès; pas bon pour le script.find
commande, la page de manuel relative à find États "Parce que -delete implique -depth, vous ne pouvez pas utiliser utilement -prune et -delete ensemble." - mais vous utilisez-prune -delete
?-prune
ne fait rien ici. Et en relisant, je constate que je n’ai pas répondu correctement à la question: j’ai pris soin de ne pas récidiver, mais la question demande explicitement une suppression récursive. J'ai corrigé ma réponse..[^.]*
au lieu de.[!.]*
lorsque la substitution d'historique est activée (ce qui est le cas par défaut de manière interactive, mais pas dans les scripts), car zsh analyse en!
tant que référence d'historique. Mais en zsh, vous n'en auriez pas besoin en premier lieu, vous pouvez simplement utiliser*(D)
pour inclure des fichiers de points (sans.
ou..
) dans la correspondance avec le caractère générique.Je viens de me rendre compte que c’est le moyen le plus pratique dans la plupart des distributions Linux:
où
-A
= tout lister sauf.
et..
-1
= mettre chaque article sur une lignela source
ls -A1 /your/path/ | xargs rm -rf
devrait postulerChangez l’
dotglob
option de votre shell et utilisez*
, ou utilisez quelque chose commefind
.la source
rm -rf /some/dir
et ensuite créer un nouveau répertoire vide à sa place.Cela devrait fonctionner comme @Gilles mais plus compact:
ou
devrait également ajouter un
if
pour une utilisation dans les scripts juste pour être sûr:la source
alias cleandir='rm -rf {,.[!.],..?}*'
fait.Trouvez est votre ami.
Si vous souhaitez utiliser de manière récursive une autre recherche dans votre répertoire actuel ($ PWD), ajoutez un chemin juste après la
find
commande; par exemplefind /path ! -name '.' ! -name '..' -delete
. Si vous souhaitez uniquement réduire len
nombre de répertoires, utilisez l'-maxdepth n
option juste après le/path
paramètre.La commande ci-dessus a été testée sur un système Ubuntu 13.04. Cela fonctionnera probablement sur d’autres systèmes linux modernes.
la source
find . ! -name '.' ! -name '..' -type d -delete
En supposant que le répertoire en question est
./dir
, alorssupprimerait de
./dir
manière récursive tous les fichiers , y compris les fichiers et répertoires cachés, y compris le./dir
répertoire lui-même.Si vous ne souhaitez pas supprimer le répertoire lui-même, vous pouvez simplement le recréer par la suite ou utiliser
ou si vous
find
ne supportez pas-delete
,Utiliser
-mindepth 1
vous permet de conserver le répertoire de niveau supérieur./dir
.la source
Je vous suggère d'expérimenter avec
Turn- ON points (fichiers cachés)
ensemble
dotglob
shopt -s dotglob
Turn- OFF points
non fixé
dotglob
shopt -u dotglob
Cette méthode fonctionnait exactement comme je le souhaitais pour une commande de copie ne contenant pas les répertoires cachés.
Alors j'ai fait une suppression (suppression), et oups ...
... ça marche aussi!
Il me semble que votre cher lecteur ne peut pas voir le
message_splitter
répertoire. De toute façon, il a un.svn
dossier qui doit être supprimé et copié dans.De la
man
page ...références:
la source
Essayez ce code:
la source