Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
1

Подскажите команды для поиска папок, файлов, текста в файлах и его замены

31.03.2017, 23:08. Показов 1852. Ответов 15

Доброго времени суток, интересует реализация скрипта,для
1.поиска файлов и папок с последущим их дублированием только с другими именами, к примеру find -name он найдет мне нужные и папки и файлы, только нужно что он найдет про дублировал и переименова?
2. почти такой же вопрос, только нужно чтобы находил текст внутри фалов и менял его на другой, как пример grep -Ir,
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2017, 23:08
Ответы с готовыми решениями:

Подскажите утилиту для поиска текста во всех файлах, содержащих текст
Утилита grep не ищет в файлах .doc (или быть может я не правильно пользуюсь?). Подскажите как...

Скрипт для замены текста в файлах
Ищу решение - как лучше реализовать замену определенного текста в текстовом файле? Файлы примерно...

Программа для замены текста во многих файлах
Здравствуйте! Подскажите бесплатную программу для одновременной замены текста во многих файлах,...

Регулярное выражение для замены текста в файлах .php
Сабж. Есть вирутальный сервер на дебиане, на нём хостятся сайты. Есть региональная сетка сайтов...

15
Заблокирован
31.03.2017, 23:16 2
У find есть опция -exec. И делай с найденным файлом все, что хочешь остальными командами.
1
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
01.04.2017, 06:30  [ТС] 3
к примеру можно? (find -name *google* -exec cp а дальше?) он же найдет и файлы и папки, только вот просто "cp" скопирует файлы как я понимаю, а "cp -a" папки, реализовать то хочется что бы и то и то, с сохранением путей
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
01.04.2017, 10:07 4
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
"cp -a" папки, реализовать то хочется что бы и то и то, с сохранением путей
Стоит научится выражать свои мысли так, чтоб и другим было понятно. В крайнем случае, приводите пример того, что Вы хотите получить.
2. man sed
1
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
02.04.2017, 16:01  [ТС] 5
допустим есть каталоги и файлы в них, к примеру:
/patch/google/vesty/vesty25.php
/patch/google/vesty/vesty.cpp
/patch/google/vesty/init.c
это были примеры не измененых файлов, скрип нужен чтобы переименовать каталоги с названием google,vesty, и файлы в нутри каталогов с такими же названиями, тоесть к такому вот виду
/patch/nova/novosty/novosty25.php
/patch/nova/novosty/novosty.cpp
/patch/nova/novosty/init.c

Добавлено через 29 минут
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#! /bin/bash
 
copyNew()
{
    mkdir $2
    find . -name *$1* -exec cp --parents -R {} $2 \;
}
 
if [ -z "$2" ]
then
    copyNew "nova" $1
    copyNew "novosty" $1
    
    copyNew "google" $1
    copyNew "vesty" $1;
else
    copyNew $1 $2
fi
что-то типо такого

Добавлено через 8 минут
такая же ситуация и с "grep" только нужно найти уже все упоминания внути файлов, и исправить на нужное, тоесть если грепом пройтись в каталоге "patch" и найти тот же "google" (его надо заменить на "nova") результатов может быть >500 и руками можно править очень долго, причем встречется в разных файлах и папках
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
02.04.2017, 16:39 6
Лучший ответ Сообщение было отмечено Aleha_Druga как решение

Решение

Bash
1
2
3
4
5
6
7
8
9
shopt -s globstar
for d in /patch/**/google/ /patch/**/vesty/; do
    case $d in
        *google/) mv -T "${d%/}" "${d%google/}nova" ;;
         *vesty/) mv -T "${d%/}" "${d%vesty/}novosty" ;;
    esac
done
rename 's/vesty([^\/]*)$/novosty$1/' /patch/**/vesty*
shopt -u globstar
Добавлено через 15 минут
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
в каталоге "patch" и найти тот же "google" (его надо заменить на "nova")
Bash
1
grep -ZIlrw 'google' /patch/ | xargs -0 sed -i 's/\<google\>/nova/g'
1
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
03.04.2017, 08:18  [ТС] 7
Marinero, а что если пути будут и другие, к примеру есть так:
/patch/google/vesty
и бывает и так:
/patch/hdpi/log/google
и так же и др.
/patch/mali/mp/vesty.
сработает скрипт, вообщем нужно всё что он найдет в каталоге "patch" всё переименовать
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
03.04.2017, 13:37 8
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
нужно всё что он найдет в каталоге "patch" всё переименовать
Скрипт так и работает. Проверьте.
1
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
05.04.2017, 19:41  [ТС] 9
Marinero, да работает,но возникла другая проблема, допустим файлы weg_google_01.mk он не находит и не правит, тоже самое и с грепом он тоже не правит если нет полного совпадения, к примеру текст в файле www_vesty_film он не поменяет, это можно как то решить?

Добавлено через 1 час 18 минут
c грепом разобрался, осталось с find решить проблему

Добавлено через 21 минуту
Bash
1
grep 'google' -P -R -I -l  patch/ | xargs sed -i 's/google/nova/g'
так заменит во всех файлах google на nova. даже www_google_ms заменит на www_nova_ms.

Добавлено через 17 минут
c find разобрался от части
Bash
1
find ./ -name '*google*' -exec rename 's/google/nova/g' {} +
но если он находит папку google и еще и внутри папки файл google то переименовывает сначало папку а потом файл, но файл уже найти не может т.к. по факту той папки уже не существует
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
05.04.2017, 19:51 10
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
c find разобрался от части
Если не понимаете что делаете, почему не сделали по аналогии с сделанным в моем коде? Там есть rename для vesty, но нет find … -exec rename
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
но файл уже найти не может т.к. по факту той папки уже не существует
Вы решили что в коде отдельно переименовываются папки и файлы потому что мне делать было нечего?
0
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
05.04.2017, 20:06  [ТС] 11
Цитата Сообщение от Marinero Посмотреть сообщение
коде отдельно переименовываются папки и файлы
это в моём варианте, в вашем коде всё хорошо переименовывается за исключением
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
файлы weg_google_01.mk он не находит и не правит
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
05.04.2017, 22:48 12
Для google
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
файлы weg_google_01.mk
надо добавить команду для переименования, тогда и будет
0
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
06.04.2017, 00:09  [ТС] 13
Marinero, ну дак она же есть уже в вашем коде!? это был пример файла, вариантов может быть много, я их не могу знать и прописать все

Добавлено через 4 минуты
и ещё вопрос, как грепу ограничить поиск? тоесть исключить из поиска определенные папки
0
Модератор
Эксперт NIX
2787 / 2032 / 681
Регистрация: 02.03.2015
Сообщений: 6,509
06.04.2017, 09:59 14
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
есть уже в вашем коде!?
Цитата Сообщение от Marinero Посмотреть сообщение
rename 's/vesty([^\/]*)$/novosty$1/' /patch/**/vesty*
Будет ли эта команда находить и переименовывать
Цитата Сообщение от Marinero Посмотреть сообщение
weg_google_01.mk
Цитата Сообщение от Aleha_Druga Посмотреть сообщение
как грепу ограничить поиск? тоесть исключить из поиска определенные папки
Цитата Сообщение от man grep
Код
--exclude=GLOB
  Skip  files whose base name matches GLOB (using wildcard matching).  A file-name glob can use *, ?,
  and [...] as wildcards, and \ to quote a wildcard or backslash character literally.

--exclude-dir=DIR
  Exclude directories matching the pattern DIR from recursive searches.
1
0 / 0 / 0
Регистрация: 03.01.2017
Сообщений: 14
15.04.2017, 07:35  [ТС] 15
Marinero, я извиняюсь что не ясно выразился, говоря про weg_google_01.mk я не имел конкретно google, понятное дело что переименованием *vesty* я не переименую google, это был пример, по всей видимости не лучший. Я немного перефразирую тогда, не переименует он weg_vesty_01.mk, говорю не от пустого места, проверял, скрипт да, красивый работает без лишних замарочек, но вот такие вот есть ньюансы.
0
270 / 18 / 0
Регистрация: 16.02.2016
Сообщений: 29
29.05.2017, 08:32 16
Linux: основные команды. Карманный справочник. Д. Дж. Еаррет
Bash Reference Manual Reference Documentation for Bash Edition 4.4, for Bash Version 4.4. September 2016
Bash Guide for Beginners by Machtelt Garrels
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2017, 08:32

написание программы для поиска и замены части строк в двух текстовых файлах с разным синтаксисом
Здравствуйте! Последний раз программировал около 5 лет назад, на первых курсах колледжа. Забыл все...

Не отрабатывают команды для удаления файлов и папок в циклах с FOR /F
Дамы и господа! Вопрос следующий: В приведённом примере не отрабатывают команды удаления папок и...

Ищу программу для поиска текста в файлах по регулярному выражению
Привет! Я обрадовался, когда, как оказалось, есть такая функция в Notepad++ . Но разочарования...

Программы для гибкого поиска и замены текста по шаблону
Есть ли программы, способные найти все совпадения в тексте, myR5] myR8] myR10], а затем умножить...

Редактор с возможностью многострочного поиска (замены) в файлах каталога, поддерживающий utf8
Здравствуйте! кто-нибудь знает такой?

Подскажите код программы для выборки текст.файлов из неск.папок
Подскажите,пожалуйста,код на Си++ Builder для следующей задачи:В директории Dir лежат папки с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru