Vous pouvez simplement faire:
gzip *
gzip vous dira qu'il ignore les fichiers qui ont déjà une .gz
fin.
Si ce message vous empêche d'utiliser:
gzip -q *
Ce que vous avez essayé n'a pas fonctionné, car gzip
ne lit pas les noms des fichiers à compresser depuis stdin, pour que cela fonctionne, vous devez utiliser:
ls | grep -v gz | xargs gzip
Vous gz
exclurez les fichiers avec le motif n'importe où dans le nom de fichier, pas seulement à la fin.¹ Vous devez également noter que l'analyse de la sortie de ls
est dangereuse lorsque vous avez des noms de fichiers avec des espaces, des sauts de ligne, etc., sont impliqués.
Une solution plus propre, sans compter gzip
pour ignorer les fichiers avec une .gz
fin, gère également les fichiers non compressés dans les sous-répertoires:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Comme izkata
indiqué: utiliser .gz
seul pour améliorer cela ne fonctionnerait pas. Vous auriez besoin d'utiliser grep -vF .gz
ou grep -v '\.gz$'
. Cela laisse toujours le danger de traiter ls
la sortie
$
pour que ce soit plus clair. Et vous ne l'avez pas échappé de.
toute façon, donc ça va seulement exclure les fichiers qui commencent pargz
(puisqu'ils n'ont "aucun caractère avantgz
")$
allant exclure (-v
) tous les fichiers qui ont des noms composés de trois caractères ou plus, y compris n'importe quel caractère suivi de "gz" n'importe où dans le nom de fichier. Il inclura donc des fichiers dont le nom commence par "gz".gz
n'importe où dans le nom (sauf le début). Il est donc préférable de l'ancrer de toute façon. N'ayant pas utilisé$
, cela se lisait comme si vous ne réalisiez pas ce que.
signifie une expression régulière, d'où le reste du commentaire déroutant.