J'essaie d'écrire un script bash qui ira dans une boucle de directory à travers les files .gz et les supprimera s'ils sont vides (c'est-à-dire le file non compressé contenu dans empty.
J'ai quelques questions:
J'essayais d'utiliser le code suivant pour atteindre ce but, mais il s'appuie sur la taille du file étant 0 je pense.
for f in dir/* do if [[ -s $f ]] then do_file_creation fi done
Malheureusement, le file gzip contient le nom de file d'origine, donc sa taille variera sans pour différents files vides.
gunzip -c $f | head -c1 | wc -c
écho 1 pour les files non nuls dans la taille non compressée et 0 pour les files vides compressés.
for f in dir/* do if [[ $(gunzip -c $f | head -c1 | wc -c) == "0" ]] then do_file_creation fi done
Pourrais-tu faire ce que tu veux?
Vous pouvez append -l
à gzip|gunzip|zcat
pour imprimer des informations sur le file gzip et tester ensuite la taille du file non compressé.
$ gunzip -l file.empty.gz compressed uncompressed ratio uncompressed_name 31 0 0.0% file.empty
Le nom de file (ou l'absence du nom de file dans le file compressé) changera la taille des files afin que vous ne puissiez pas searchr une taille standard, par exemple
$ touch file1 file2-longer-name file3 $ gzip file1 file2-longer-name $ gzip --no-name file3 $ ls -l file*.gz -rw-r--r-- 1 cwarden cwarden 26 May 29 10:33 file1.gz -rw-r--r-- 1 cwarden cwarden 38 May 29 10:33 file2-longer-name.gz -rw-r--r-- 1 cwarden cwarden 20 May 29 10:33 file3.gz
Je ferais probablement quelque chose comme ça:
for f in dir/*; do zcat $f | head -1 | ifne -n rm -f $f > /dev/null done
Il y a probablement une meilleure façon mais cela devrait vous donner la taille du file de la version non compressée du file compressé:
export fsize=$(gunzip -l ${f} | tail -1 | awk -F " " '{print $2}' )
for i in *.gz do [ `zcat "$i" | head -n 1 | wc -c ` -eq 0 ] && rm -i "$i" done
Le zcat "$i" | head -n 1 | wc -c
zcat "$i" | head -n 1 | wc -c
zcat "$i" | head -n 1 | wc -c
countra le nombre de caractères de la première ligne du file, ce qui évite de décompresser l'set du file en regardant simplement le début.
J'ai aussi ajouté un -i
à la command rm
pour requestr une confirmation avant de supprimer le file, mais vous pouvez le supprimer si cela n'est pas nécessaire dans votre cas.