web-dev-qa-db-fra.com

Fichier de suppression Linux de taille 0

Comment puis-je supprimer un certain fichier sous Linux si sa taille est 0. Je veux l'exécuter dans une crontab sans script supplémentaire.

l filename.file | grep 5th-tab | not eq 0 | rm

Quelque chose comme ça?

147
Franz Kafka

Cela supprimera tous les fichiers d'un répertoire (et inférieur) de taille zéro.

find /tmp -size  0 -print0 |xargs -0 rm --

Si vous voulez juste un fichier particulier;

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi
198
Paul Tomblin

vous voudriez utiliser find :

 find . -size 0 -delete
243
James.Xu

Pour rechercher et supprimer des fichiers vides dans le répertoire et les sous-répertoires actuels:

find . -type f -empty -delete

-type f est nécessaire car les répertoires sont également marqués pour être de taille zéro.


Le point . (répertoire actuel) est le répertoire de recherche de départ. Si vous avez GNU find (par exemple, pas Mac OS), vous pouvez l'omettre dans ce cas:

find -type f -empty -delete

De documentation GNU find :

Si aucun fichier à rechercher n'est spécifié, le répertoire actuel (.) Est utilisé.

112
Antonio

Vous pouvez utiliser la commande find pour le faire. Nous pouvons faire correspondre les fichiers avec -type f et les fichiers vides en utilisant -size 0. Ensuite, nous pouvons supprimer les correspondances avec -delete.

find . -type f -size 0 -delete
14
PYK

Cela fonctionne pour BSD ordinaire, il devrait donc être universellement compatible avec toutes les versions. Ci-dessous, par exemple, dans pwd (.)

find . -size 0 |  xargs rm
4
user1874594

Sous Linux, la commande stat (1) est utile lorsque vous n'avez pas besoin de find (1):

(( $(stat -c %s "$filename") )) || rm "$filename"

La commande stat ici nous permet juste d’obtenir la taille du fichier, c’est le -c %s (voir les pages de manuel pour les autres formats). J'exécute le programme stat et en capture la sortie, c'est la $( ). Cette sortie est vue numériquement, c'est le (( )) extérieur. Si la taille est zéro, la valeur est FALSE et la deuxième partie du OR est exécutée. Non nul (fichier non vide) sera VRAI, ainsi la machine ne sera pas exécutée.

3
cdarke

Pour une suppression non récursive (en utilisant du et awk):

rm `du * | awk '$1 == "0" {print $2}'`
2
Harrison
find . -type f -empty -exec rm -f {} \;
1
Diệu Thu Lê