Как использовать find и echo для добавления файла - PullRequest
0 голосов
/ 25 апреля 2020

Привет, это моя файловая система, и я хотел бы добавить «Hello world» в каждый текстовый файл, в имени которого 1.

root@s11: ~ / Test # ls -R

.: AB

. / A: A1 A2

. / B: B1 B2

То, что я до сих пор делал, это

root@s11: ~ / Test # find. -имя "* 1" -exe c echo "Hello World" >> {} \;

root@s11: ~ / Test # find. -имя "* 1" -exe c file {} \;

. / A / A1: пустой файл

. / B / B1: пустой файл

Моя машина солярис 11.3

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

То, что вы передаете -exec - это программа для выполнения и отдельные аргументы. В частности, вы НЕ передаете команду оболочки.

Однако >> является конструкцией оболочки, поэтому, если вы хотите ее использовать, вам нужно запустить оболочку:

find . -iname '*1*' -exec sh -c 'echo "Hello World" >> {}' \;

Здесь отдельные аргументы, передаваемые -exec: sh, -c, echo "Hello World" >> {}, что позволяет вам запускать команду оболочки.

Также обратите внимание, что я сделал -ianme '*1*' с момента вашего вопроса сказал "имеет 1 в своем названии", а не "оканчивается на 1".

0 голосов
/ 25 апреля 2020

почему бы не сделать это легко. Попробуйте следующее:

find / -name '*1' | while read line; do
    echo "Hello World" >> $line
done

Upvote, если это работает для вас

...