Копировать файлы, в которых есть хотя бы одно упоминание одного слова - PullRequest
0 голосов
/ 27 июня 2019

Я хочу просмотреть 100K + текстовые файлы из каталога и скопировать в другой каталог только те, которые содержат хотя бы одно слово из списка.

Я пытался сделать оператор if с помощью grep и cp, но я не знаю, как заставить его работать таким образом.

for filename in *.txt 
do 
grep -o -i "cultiv" "protec" "agricult" $filename|wc -w 
if [ wc -gt 0 ]
then cp $filename ~/desktop/filepath
fi 
done

Очевидно, что это не работает, но я понятия не имею, каксохранить результат wc, а затем сравнить его с 0 и воздействовать только на эти файлы.

1 Ответ

3 голосов
/ 27 июня 2019

Используйте параметр -l, чтобы grep печатал все имена файлов, соответствующие шаблону. Затем используйте xargs, чтобы передать их в качестве аргументов cp.

grep -l -E -i 'cultiv|protec|agricult' *.txt | xargs cp -t ~/desktop/filepath --

Опция -t является расширением GNU cp, она позволяет вам сначала поместить каталог назначения, чтобы он работал с xargs.

Если вы используете версию без этой опции, вам нужно использовать опцию -J для xargs для замены в середине команды.

grep -l -E -i 'cultiv|protec|agricult' *.txt | xargs -J {} cp -- {} ~/desktop/filepath
...