команда find и grep это, но не то - PullRequest
0 голосов
/ 02 сентября 2011

Я пытаюсь найти все файлы, которые не являются файлами *.o (object), и сохранить их в файле MyFile.lst в текущем дереве каталогов.

Я делаю это с помощью команды ниже.

     #! /usr/bin/ksh
     find . -type f | grep -v "*.o" >> MyFile.lst

По какой-то причине он не работает, пожалуйста, помогите мне.

Редактировать:

find . -type f | grep -v '\.o$' >> MyFile.lst

Похоже, работает.Любой комментарий / предложение. (Добавлено исправление keith.layne)

Ответы [ 3 ]

0 голосов
/ 02 сентября 2011

Ваше редактирование должно быть в порядке ... $ (как я уверен, вы знаете) должно совпадать с концом строки.

Однако вы должны сделать одно изменение: экранировать .(подстановочный знак) с \.В противном случае вы подойдете, например, к файлу с именем «Mo».

Я думаю (из быстрого теста), что grep трактует * как литерал в начале шаблона.

Ваш скрипт теперь будет:

#! /usr/bin/ksh
find . -type f | grep -v '\.o$' >> MyFile.lst
0 голосов
/ 02 сентября 2011
find . -not -name "*.o" -type f >> list
0 голосов
/ 02 сентября 2011

Вам не нужно grep.

find . -type f  '!' -name '*.o' >> MyFile.lst

В grep шаблон поиска должен быть регулярным выражением.Следовательно, ., $ и * имеют особое значение.

.  means match any character
$  means match the end of a line
X* means match X, zero or more times(greedy)

grep -v '\.o$' будет соответствовать файлам с расширением .o.(Вам нужно экранировать . для его буквального значения).

...