Je voudrais supprimer tous les fichiers, mais conserver la structure des dossiers. Y a-t-il un moyen?
REMARQUE: (j'utilise GNU bash 4.1.5).
Je voudrais supprimer tous les fichiers, mais conserver la structure des dossiers. Y a-t-il un moyen?
REMARQUE: (j'utilise GNU bash 4.1.5).
Réponses:
Essaye ça:
find . ! -type d -exec rm '{}' \;
Cela supprimera chaque fichier, à l'exception des répertoires, sous le répertoire de travail actuel. Soyez extrêmement prudent avec cette commande.
Si la version de find
sur votre machine le prend en charge, vous pouvez également utiliser
find . ! -type d -delete
find
commande ne voit jamais les guillemets. Il voit simplement le {}
marqueur comme un argument.
-exec command {} +
" & this " -exec command ;
". J'ai utilisé le \;
passé dans le passé, jamais le '{}'.
Vous pouvez utiliser la commande find
pour localiser chaque fichier mais conserver la structure du répertoire:
$ find /some/dir -type f -exec rm {} +
Selon ce Q&A Unix et Linux intitulé: gnu trouver et masquer le {} pour certains shells - lequel? , échapper au {}
avec des ticks simples ( '
) ne semble plus nécessaire avec les shells modernes tels que Bash.
Le moyen facile de supprimer récursivement tous les fichiers normaux du répertoire et des sous-répertoires actuels:
zsh -c 'rm **/*(.)'
Seul zsh a des qualificatifs de globalisation pour faire correspondre les fichiers par type. Cependant, la rm
commande ne fonctionne pas sur les répertoires, donc en bash, vous pouvez utiliser
shopt -s globstar
rm **/*
Cela ne fonctionne pas pour les commandes autres que rm
si. En général, vous pouvez utiliser find
:
find . -type f -delete
ou si votre find
ne prend pas en charge -delete
:
find . -type f -exec rm {} +
J'avais une exigence similaire de supprimer des fichiers d'un chemin et de ses sous-répertoires (filtrage par le temps) sans supprimer la structure du répertoire.
Et j'ai utilisé le format ci-dessous qui a fonctionné pour moi.
find / test123 / home / test_file_hip / data / nfs -mtime +6 -type f -exec rm {} \;
Syntex: find (chemin du fichier) -mtime (supérieur ou inférieur à jours) -type f -exec rm {} \;
-type: mentionner le type de fichier "f" pour le répertoire "d" -exec: exécuter la commande rm: supprimer {}: sortie de la commande find
Remarque: testez-le avant de l'utiliser. N'hésitez pas à corriger ou à mettre à jour si j'ai raté quelque chose.
find ... rm
structure de base a déjà été couverte, je ne suis pas sûr que ce soit une contribution précieuse en tant que nouvelle réponse à cette question.