КАРТА САЙТА
Sibnet.ru
Sibnet.ru

Sibnet.ru — это информационно-развлекательный интернет-проект, ориентированный на широкий круг Сибирского региона.
По данным Rambler Top100, Sibnet.ru является самым популярным порталом в Сибири.

Контакты:
АО "Ринет"
ОГРН 1025402475856
г. Новосибирск, ул. Якушева, д. 37, 3 этаж
отдел рекламы:
(383) 347-10-50, 347-06-78, 347-22-11, 347-03-97

Редакция: (383) 347-86-84

Техподдержка: (383) 347-22-44
help.sibnet.ru

Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!

Здравствуйте, гость ( Вход | Регистрация )



 
Ответить в эту темуОткрыть новую тему
> Великий Bash
netxyligan
сообщение 14.6.2016, 17:43
Сообщение #1


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


ребята, начала тут изучать линукс и хотел попробовать написать скрипт. По идее он простой, а именно: находим в имеющихся папках файл, и в нем дописываем строчку. Как это можно реализовать, подскажите, пожалуйста.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jek
сообщение 14.6.2016, 19:04
Сообщение #2


     
Group Icon


Группа: IRC Maniaque
Сообщений: 13 378
Регистрация: 27.9.2007
Из: Кемерово >>> Южный WEB: http://irc.k-42.ru IRC: irc.sibnet.ru #iclub
Пользователь №: 6 588



Репутация:   1602  


Реализовать это можно без проблем.

Код
#!/bin/sh
CURDIR=`pwd`
LC=`locale | grep ^LANG | awk -F"." '{print $2}'`
cd /
find . -name "superpuper.file" -type f -exec echo "Дописанная строчка" | \
  iconv -f windows-1251 -t $LC >> {} \;
cd $CURDIR

Можно ещё сотню интересных вариантов придумать smile.gif.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 14.6.2016, 20:44
Сообщение #3


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


Цитата(Jek @ 14.6.2016, 18:04) *

Реализовать это можно без проблем.

Код
#!/bin/sh
CURDIR=`pwd`
LC=`locale | grep ^LANG | awk -F"." '{print $2}'`
cd /
find . -name "superpuper.file" -type f -exec echo "Дописанная строчка" | \
  iconv -f windows-1251 -t $LC >> {} \;
cd $CURDIR

Можно ещё сотню интересных вариантов придумать smile.gif.


я вижу у тебя sh, могу ли на bash менять или как?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 14.6.2016, 21:03
Сообщение #4


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


[myarkovskiy@adminy ~]$ sudo myfiles/testscript
find: отсутствует аргумент у «-exec»
iconv: преобразование в «;» не поддерживается
Попробуйте «iconv --help» или «iconv --usage» для
получения более подробного описания.


Ругается, аргументы чет я понять у exec не могу
Есть что-то более простое? тоже, типо "Найди такой файл, и допиши в него это" ток без exec. Как мне сегодня сказал сосед, то можно все в одну строчку вообще влепить
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jek
сообщение 14.6.2016, 21:31
Сообщение #5


     
Group Icon


Группа: IRC Maniaque
Сообщений: 13 378
Регистрация: 27.9.2007
Из: Кемерово >>> Южный WEB: http://irc.k-42.ru IRC: irc.sibnet.ru #iclub
Пользователь №: 6 588



Репутация:   1602  


Цитата(netxyligan @ 14.6.2016, 20:44) *
я вижу у тебя sh, могу ли на bash менять или как?

Ну если уж какой-то древний tcsh может это выполнить - названный тобой великим bash тоже справится.

Цитата(netxyligan @ 14.6.2016, 21:03) *
Ругается, аргументы чет я понять у exec не могу

А это уже особенности реализации find в разных линуксах. Можно посмотреть man в своей любимой системе и подправить под свои нужды.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MagistrZoom
сообщение 14.6.2016, 22:48
Сообщение #6


See vis paceem, para belum
Group Icon


Группа: Модераторы
Сообщений: 5 536
Регистрация: 23.10.2009
Из: Корусант
Пользователь №: 153 131



Репутация:   372  


Цитата(Jek @ 14.6.2016, 20:31) *

Ну если уж какой-то древний tcsh может это выполнить - названный тобой великим bash тоже справится.
А это уже особенности реализации find в разных линуксах. Можно посмотреть man в своей любимой системе и подправить под свои нужды.

Незаэкранированная пайпа после echo в -exec будет обработана шеллом, а не find`ом. Не помню ни единого случая, когда кому- то удалось запихать конвейер в exec (без хаков типа sh -c)

Сообщение отредактировал MagistrZoom - 14.6.2016, 22:49
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jek
сообщение 14.6.2016, 23:52
Сообщение #7


     
Group Icon


Группа: IRC Maniaque
Сообщений: 13 378
Регистрация: 27.9.2007
Из: Кемерово >>> Южный WEB: http://irc.k-42.ru IRC: irc.sibnet.ru #iclub
Пользователь №: 6 588



Репутация:   1602  


Да здесь трубопровод по большому счёту не нужен, это я уже впилил от нефиг делать smile.gif.

Вот такой вариант 100% рабочий - ищет по всем дискам, вгоняет строку без перекодировки, возвращается в исходную папку. Работает даже под FreeBSD biggrin.gif.

Код
#!/bin/sh
CURDIR=`pwd`
cd /
find . -name "superpuper.file" -type f -exec echo "Дописанная строчка" >> {} \;
cd $CURDIR
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 15.6.2016, 10:10
Сообщение #8


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


Цитата(Jek @ 14.6.2016, 22:52) *

Да здесь трубопровод по большому счёту не нужен, это я уже впилил от нефиг делать smile.gif.

Вот такой вариант 100% рабочий - ищет по всем дискам, вгоняет строку без перекодировки, возвращается в исходную папку. Работает даже под FreeBSD biggrin.gif.

Код
#!/bin/sh
CURDIR=`pwd`
cd /
find . -name "superpuper.file" -type f -exec echo "Дописанная строчка" >> {} \;
cd $CURDIR



Будем тестить. Кстати, забыл уточнить, сижу на Arch
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 15.6.2016, 10:27
Сообщение #9


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


заюзал скрипт, с небольшими изменениями. В итоге скрипт отработал, но не полностью. Не забил в найденные файлы строку.
Прикрепленное изображение
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 15.6.2016, 11:53
Сообщение #10


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


Протетстил все скрипты. Проверяю файлы, в итоге ни в одном строка не добавилась
Пошла вода горячая. Есть другой вопросик. Как правильно построить структуру скрипта, чтобы он искал среди 800 папок один файл (причем такой файл есть в каждой папке) и как только он находит этот файл, добивал в нем строку и переходил к следующей папке.

Сообщение отредактировал netxyligan - 15.6.2016, 12:07
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jek
сообщение 15.6.2016, 12:22
Сообщение #11


     
Group Icon


Группа: IRC Maniaque
Сообщений: 13 378
Регистрация: 27.9.2007
Из: Кемерово >>> Южный WEB: http://irc.k-42.ru IRC: irc.sibnet.ru #iclub
Пользователь №: 6 588



Репутация:   1602  


А find по-твоему что делает? smile.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 15.6.2016, 13:28
Сообщение #12


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


Цитата(Jek @ 15.6.2016, 11:22) *

А find по-твоему что делает? smile.gif


Ну он находит, а как заставить echo отправлять строчку не по точному пути, а по всем путям, что нашел find?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Jek
сообщение 15.6.2016, 13:43
Сообщение #13


     
Group Icon


Группа: IRC Maniaque
Сообщений: 13 378
Регистрация: 27.9.2007
Из: Кемерово >>> Южный WEB: http://irc.k-42.ru IRC: irc.sibnet.ru #iclub
Пользователь №: 6 588



Репутация:   1602  


Бррррррррррррррррр... Почитай, как find работает. Команда, указанная в -exec применяется ко всем найденным файлам.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
netxyligan
сообщение 15.6.2016, 17:02
Сообщение #14


Поддерживает разговор
Group Icon


Группа: Пользователи
Сообщений: 173
Регистрация: 28.7.2012
Из: Новосибирск
Пользователь №: 443 513



Репутация:   4  


Цитата(Jek @ 15.6.2016, 12:43) *

Бррррррррррррррррр... Почитай, как find работает. Команда, указанная в -exec применяется ко всем найденным файлам.

Поспал, покушал, посидел на горшке и там мне пришла самая умная мысль, и вот она:
Код
find /home/domain/homes -mount -name "bookmarks" -exec sed -i '/davs/d' {} \;
find /home/domain/homes -mount -name "bookmarks" -exec sh -c 'echo -e "davs://files.e2e4online.ru/remote.php/webdav Облачное хранилище\n" >> {}' \;


ПЫ.СЫ.
Тему можно закрывать

Сообщение отредактировал netxyligan - 15.6.2016, 17:03
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 21.9.2017, 13:38
Редакция: (383) 347-86-84

Техподдержка: (383) 347-22-44
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов