2016-11-29 3 views
0
find . -type f -path '*/browser/components/*/*.react.js' -exec sed -i "" '1 i\ 
import { logRender } from "../../../common/lib/logger"; 
' {} + 

выше команды выполнить только 1 файл только первый, а не каждого из результатов:Unix - не может выполнить каждый результат найти файлы

find . -type f -path '*/browser/components/*/*.react.js'

Есть ли что-то я пропустил?

+1

Может быть, дело в том, что '{} +' строительство помещает список из файлов, найденных в 'find' .. Рассмотрим, чтобы заменить его на' {}; '. (Как обычно, возможно, вам нужно будет избежать ';': '{} \;'.) –

ответ

0

вы можете попробовать это;

find . -type f -path '*/browser/components/*/*.react.js' -exec sed -i "" '1 i\ 
import { logRender } from "../../../common/lib/logger"; 
' {} \; 
0

опция Use СЕПГ -s (--separate):

-s, --separate

рассматривать файлы как отдельные, а не в виде единого непрерывного длинного потока.

так найти «s -exec command + действие строит команду присоединяя каждое выбранное имя файла в конце. В частности, команда sed будет вызываться с несколькими файлами: sed ... file1 file2 file3 ....

В противном случае обрабатывайте файлы последовательно с помощью find -exec sed -i '...' {} ';'.

Кстати, очень вероятно, что вы используете GNU SED, так как команда i\ является расширением GNU. С GNU SED вам не нужно указывать аргумент для опции -i.

Кроме того, рассмотрите возможность передачи сценария SED через -e (--expression), чтобы избежать двусмысленностей.

Пример:

find . -type f -path '*/browser/components/*/*.react.js' -exec sed -s -i -e '1 i\ 
import { logRender } from "../../../common/lib/logger"; 
' {} +