команда linux для добавления информации - PullRequest
2 голосов
/ 07 января 2011

Можно ли найти все файлы .java на диске и добавить текст "имя автора: man" ... с помощью команды linux

Ответы [ 2 ]

2 голосов
/ 07 января 2011

Простейшим является ..

find ./ -name '*.java' -exec echo "author name :man" >> {} \;

DC

Чтобы объяснить, что из вышеперечисленного делает

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

./ - каталог для поиска, в данном случае ./ означает текущий каталог.Если вы хотите, чтобы он выполнял поиск по всему компьютеру, используйте /, если вы хотите, чтобы он выполнял поиск только в определенной папке или подпапке, используйте /folder/subfolder ИЛИ cd в этом каталоге и используйте ./, как в примере команды выше * 1016.*

-name сообщает, что вы ищете файл с именем, которое следует за ним, в примере мы говорим ему искать любой файл, заканчивающийся на .java, поэтому подстановочный знак * мы ставим в одинарные кавычкивокруг имени, как в '*.java', чтобы предотвратить «Расширение оболочки», Google для получения дополнительной информации.

-exec говорит найти, что для каждого файла выполните команду, следующую за ним, в этом случае команда echo "author name :man" >> {}это означает, что выведите (напишите) строку «имя автора: man» и добавьте >> к найденному файлу.find заменяет токен {} на имя файла файла, оно относится к текущей папке, например той, в которой вы находитесь, когда запускаете команду.\; говорит найти, что это конец команды.другие команды могут следовать за ним, если вы хотите (вы должны использовать логическую операцию, такую ​​как -and).

, поэтому для тестового запуска ssh на ваш сервер и запустите эту команду

 find / -name '*.java'

.найти все файлы на вашем сервере с расширением .java.это может быть много и может занять много времени.

когда это будет сделано, давайте попробуем -exec что-то предпочтительно что-то, что не вызовет никакого повреждения, поэтому попробуйте эту команду

find / -name '*.java' -exec ls -alh {} \;

Это заставляет find запускать команду ls для каждого файла, заканчивающегося на .java, который он находит.

Теперь вы можете использовать команду find для выполнения того, что вам нужно

cd для корневого каталога.из папки, содержащей файлы Java, которые вы хотите изменить и запустить команду, конечно, не забывайте, что добавление простого текста в файл Java нарушит его.убедитесь, что текст в форме комментария.

, возможно, лучшая команда будет

find ./ -name '*.java' -exec cat authors.txt >> {} \;

Где авторы .txt содержит данные, которые вы хотите добавить.Приведенная выше команда добавит все содержимое файла author.text к каждому найденному файлу .java.

Будьте осторожны, эта команда очень мощная, и "с большой силой приходит" ... что-то или другое

Другими словами, сначала убедитесь, что вы создали резервные копии, ДО запуска команды, которая вносит массовые изменения.вы можете сожалеть об этом по-другому

DC

И наконец, ПОДГОТОВИТЬ детали к файлам немного сложнее, так как hhafez заявил, что вы можете использовать другой скрипт, который сделает это за вас.

создайте скрипт addauthor.sh ...

 #!/bin/bash
cat authors.txt > /tmp/tempfile
cat $1 >> /tmp/tempfile
cp --reply=yes /tmp/tempfile $1

и измените команду поиска на

find ./ -name '*.java' -exec sh addauthor.sh {} \;

Сначала проверьте его

DC

1 голос
/ 07 января 2011

Вы хотите сделать это деструктивным способом или сделать копию, если вы не против сделать это в линию

find . -name *.java -exec add_text.sh {}\;

где add_text.sh выглядит примерно так

#!/bin/sh
$input_file = $1
$header_file = /path/to/the/header/file/you/want/to/insert/
mv ${input_file} ${input_file}_tmp
cat $header_file ${input_file}_tmp > ${input_file}

Предупреждение, это не проверено :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...