2010-07-12 2 views
0

Это код, который я использую для распаковки файла grep по содержимому файлов в tar, а затем удалять неиспользуемые файлы. У меня не хватает места для распаковки всех файлов одновременно.для i в `ls | grep` вопрос

вопрос, который у меня есть, с для f в `ls | grep -v * .gz Это должно найти файлы, которые вышли из tar, и их можно идентифицировать, не имея расширения .tar.gz, но похоже, что они не забирают их?

Любая помощь будет высоко ценится

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 

ответ

3

Try ls -1 | grep -v "\\.gz$". -1 сделает ls выходным результатом на строку. Я также исправил ваше регулярное выражение для вас несколькими способами.

Хотя лучший способ решить эту проблему - find -exec.

+0

Нет необходимости в -1. Когда вы обрабатываете вывод ls, обычно файлы указываются один за другим. – thegeek

+0

@thegeek: почему, так они и есть. Острота. – Borealid

0

Измените его на ls | grep -v "*.gz", вы должны указать *.gz, потому что иначе он просто будет glob-файлы в рабочем каталоге и grep их.

0

Не используйте ls в сценариях и не используйте grep для соответствия шаблонам файлов. Вместо этого используйте подгонки и тесты:

for f in * 
do 
    if [[ $f != *.gz ]] 
    then 
     ... 
    fi 
done 
Смежные вопросы