Find создает файл, когда я использую {} - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь использовать find, чтобы создать очень простой способ добавления новой строки в файл. Я знаю, что есть множество других способов сделать это, но черт возьми, что я не могу заставить этот способ работать. Так что - я НЕ спрашиваю, как добавить новую строку в файл - я спрашиваю, почему найти странно.

find . -type f -iname 'file' -exec echo >> {} \;

приводит к созданию нового файла с именем "{}" с новой строкой в ​​то время (чтобы проверить, что find работает на моем компьютере):

find . -type f -iname 'file' -exec echo {} \;

печатает "./file".

Так что >> делает поиск запутанным. Вопрос в том, почему и как мне это решить?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Хотя на сам вопрос уже дан ответ, я хотел бы отметить, что вам не обязательно заставлять find делать все, вместо этого вы можете использовать другие доступные средства для совместной работы, например:

find . -type f -iname 'file' | while read file; do echo >>"$file"; done

Этот подход также имеет то преимущество, что не выполняет новый процесс для каждого совпадения, что не имеет значения в этом случае, но потенциально важно, если есть тысячи совпадений, а exec является относительно тяжелым.

0 голосов
/ 01 сентября 2018

Я спрашиваю, почему найти странно.

Это не так. Это не имеет ничего общего с find. Фактически, когда файл создан, find даже не запустился.

>> примерно означает «перенаправить стандартный вывод в конец этого файла, при необходимости создайте новый файл». Обратите внимание, что ничего из этого не имеет ничего общего с тем, что осталось из >>.

Перенаправление является функцией оболочки, find ничего не знает о перенаправлении, а оболочка ничего не знает о find. >> волшебным образом не меняет своего значения только потому, что вы случайно позвонили find. Это все еще означает то же самое.

Если вы хотите использовать функцию оболочки в -exec, вам нужно использовать оболочку в -exec:

find . -type f -iname 'file' -exec sh -c 'echo >> "{}"' \;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...