web-dev-qa-db-fra.com

Comment supprimer plusieurs fichiers d'octets sous Linux?

J'ai un répertoire avec beaucoup de fichiers 0 octets. Je ne peux même pas voir les fichiers lorsque j'utilise la commande ls. J'utilise un petit script pour supprimer ces fichiers, mais parfois, cela ne les supprime même pas. Voici le script:

i=100
while [ $i -le 999 ];do
    rm -f file${i}*;
    let i++;
done

Y a-t-il un autre moyen de faire cela plus rapidement?

48
small_ticket

Utilisez find combiné avec xargs.

find . -name 'file*' -size 0 -print0 | xargs -0 rm

Vous évitez de démarrer rm pour chaque fichier.

105
Didier Trosset

Avec la find de GNU (voir les commentaires), il n’est pas nécessaire d’utiliser xargs:

find -name 'file*' -size 0 -delete
71
coredump

Vous pouvez utiliser la commande suivante: 

trouver . -maxdepth 1 -size 0c -exec rm {} \;

Et si vous souhaitez également supprimer les fichiers de 0 octet dans les sous-répertoires, omettez -maxdepth 1 dans la commande précédente et exécutez-le.

5
jitendra

Supprimer tous les fichiers nommés fichier ... dans le répertoire actuel:

find . -name file* -maxdepth 1 -exec rm {} \;

Cela prendra encore beaucoup de temps car rm est lancé pour chaque fichier.

4
Sjoerd
find . -maxdepth 1 -type f -size 0 -delete

Ceci trouve les fichiers de taille 0 dans le répertoire actuel, sans entrer dans les sous-répertoires, et les supprime.

Pour lister les fichiers sans les supprimer:

find . -maxdepth 1 -type f -size 0
3
user7194913

vous pouvez même utiliser l'option -delete qui supprimera le fichier.

de l'homme trouver, -effacer Supprimer les fichiers; vrai si la suppression a réussi.

2
thegeek

Voici un exemple. Essayez par vous-même pour que cela ait un sens:

bash-2.05b$ touch empty1 empty2 empty3
bash-2.05b$ cat > fileWithData1
Data Here
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty1
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty2
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty3
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1
bash-2.05b$ find . -size 0 -exec rm {} \;
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1

Si vous consultez la page de manuel de find (tapez man find), vous verrez un tableau d’options puissantes pour cette commande.

1
Noel M

En montant un niveau, il est utile de comprendre pourquoi les fichiers sont là. Vous ne faites que traiter un symptôme en les supprimant. Que se passe-t-il si un programme les utilise pour verrouiller des ressources? Si tel est le cas, leur suppression pourrait conduire à la corruption. 

lsof est un moyen de déterminer quels processus gèrent les fichiers vides.

0
Paul Rubel

Si vous souhaitez rechercher et supprimer tous les fichiers de 0 octet dans un dossier:

find /path/to/folder -size 0 -delete
0
Lão Còi

"... parfois, cela ne supprime même pas ces fichiers" me fait penser que c'est quelque chose que vous faites régulièrement. Si tel est le cas, ce script Perl supprimera tous les fichiers normaux de zéro octet de votre répertoire actuel. Il évite complètement l'utilisation d'un appel système (unlink) et est assez rapide.

#!/usr/bin/env Perl
use warnings;
use strict;

my @files = glob "* .*";
for (@files) {
    next unless -e and -f;
    unlink if -z;
}
0
andereld