потому что я в вопросе `ls | grep` - PullRequest
0 голосов
/ 12 июля 2010

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

У меня проблема с для 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 ]

3 голосов
/ 12 июля 2010

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

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

0 голосов
/ 12 июля 2010

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

for f in *
do
    if [[ $f != *.gz ]]
    then
        ...
    fi
done
0 голосов
/ 12 июля 2010

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

...