2010-07-12 8 views
0

Ceci est le code que j'utilise pour décompresser un fichier grep sur le contenu des fichiers dans le tar puis supprimer les fichiers non modifiés. Je n'ai pas assez d'espace pour décompresser tous les fichiers à la fois.pour i dans `ls | grep` question

le problème que j'ai est avec le pour f dans `ls | grep -v * .gz ligne est censé trouver les fichiers qui sont sortis du tar et peuvent être identifiés en n'ayant pas une extension .tar.gz mais il ne semble pas les ramasser?

Toute aide serait appréciée

M

for i in *.tar.gz; 
do echo $i >>outtput1; 
    tar -xvvzf $i; mv $i ./processed/; 
    for f in `ls | grep -v *.gz`; ----- this is the line that isn't working 
    do echo $f >> outtput1; 
    grep 93149249194 $f >> 
    outtput1; grep 788 $f >> outtput1; 
    rm -f $f; 
    done; 
done 

Répondre

3

Essayez ls -1 | grep -v "\\.gz$". Le -1 affichera un résultat de ls par ligne. J'ai également réparé votre regex pour vous de plusieurs façons.

Bien qu'une meilleure façon de résoudre tout cela soit avec find -exec.

+0

Pas besoin de -1. Lorsque vous lancez la sortie ls, normalement les fichiers sont donnés un par un. – thegeek

+0

@thegeek: pourquoi, ils le sont. Nifty. – Borealid

0

Changez-le en ls | grep -v "*.gz", vous devez citer *.gz parce que sinon, il ne fera que regrouper les fichiers dans le répertoire de travail et les grep.

0

N'utilisez jamais ls dans les scripts et n'utilisez pas grep pour faire correspondre les modèles de fichiers. Utilisez la globalisation et les tests à la place:

for f in * 
do 
    if [[ $f != *.gz ]] 
    then 
     ... 
    fi 
done