The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"bash script find *pattern*"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"bash script find *pattern*"  –2 +/
Сообщение от bre (ok) on 12-Май-15, 00:54 
Делаю скрипт, который перебирает все файлы с расширением *.ext1 и по каждому найденному file.ext1 должен найти файл с расширением ext2 но с таким же именем file, т.е. зная file.ext1 ищем file.ext2

вот такой код:
find "." -type f -iname «*.ext1» | sort | while read file_ext1
do
myFILE_basename=$(basename «$file_ext1») # убираем путь к файлу
myFILE_name=${myFILE_basename%.*} # убираем расширение, получаем только имя файла

find "." -type f -iname «${myFILE_name}.ext2» | sort | while read file_ext2
do
echo «$file_ext1»
echo «$file_ext2»
done;
done;

Все отлично работает на файлах, содержащих буквы, цифры, пробелы. Но совершенно не работает на файлах, имеющих в названиях '[', ']' или ещё какую экзотику типа спецсимволов.

Т.е. если рядом будут лежать файлы:
file1[my].ext1
file1[my].ext2
-то второй фал не будет найден.

Если строчку
find "." -type f -iname «${myFILE_name}.ext2»
заменить на
find "." -type f -iname «*.ext2» | grep «${myFILE_name}»
- тоже ничего не получиться.

Как засунуть в паттерн имя файла, содержащее спец символы?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по ответам | RSS]

1. "bash script find *pattern*"  +/
Сообщение от Pahanivo (ok) on 12-Май-15, 07:18 
>[оверквотинг удален]
> find "." -type f -iname «*.ext1» | sort | while read file_ext1
> do
> myFILE_basename=$(basename «$file_ext1») # убираем путь к файлу
> myFILE_name=${myFILE_basename%.*} # убираем расширение, получаем только имя файла
> find "." -type f -iname «${myFILE_name}.ext2» | sort | while read file_ext2
> do
> echo «$file_ext1»
> echo «$file_ext2»
> done;
> done;

ммм а если файлов *.ext1 миллион так и будите поиск насиловать по рекурсии?
не проще сделать поиск два раза максимум и работать со списками *.ext1 *.ext2

> Все отлично работает на файлах, содержащих буквы, цифры, пробелы. Но совершенно не
> работает на файлах, имеющих в названиях '[', ']' или ещё какую
> экзотику типа спецсимволов.

эта хрень по вышеописанной причине отлично работать не может

> Т.е. если рядом будут лежать файлы:
> file1[my].ext1
> file1[my].ext2
> -то второй фал не будет найден.
> Если строчку
> find "." -type f -iname «${myFILE_name}.ext2»
> заменить на
> find "." -type f -iname «*.ext2» | grep «${myFILE_name}»
> - тоже ничего не получиться.
> Как засунуть в паттерн имя файла, содержащее спец символы?

научится пользоваться кавычками к месту и по делу?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "bash script find *pattern*"  –2 +/
Сообщение от bre (ok) on 12-Май-15, 10:44 
Pahanivo, ваш ответ на вопрос "Как засунуть в паттерн имя файла, содержащее спец символы?" был очень ценным.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "bash script find *pattern*"  +/
Сообщение от Andrey Mitrofanov on 12-Май-15, 11:02 
> Pahanivo, ваш ответ на вопрос "Как засунуть в паттерн имя файла, содержащее
> спец символы?" был очень ценным.

Правильный вопрос: Как не упустить "не те" символы за пределы shell-переменных?
Правильный ответ: Использовать экранирование и квотирование.

+++Мир-труд-май. Все обижают двоечников, они обижаются на всё.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "bash script find *pattern*"  +/
Сообщение от Аноним (??) on 12-Май-15, 17:05 
> Правильный ответ: Использовать экранирование и квотирование.
> +++Мир-труд-май. Все обижают двоечников, они обижаются на всё.

Да лааааднаа! (С)
Твой правильный ответ - самая ... кхм ... самая мрачная часть шелла! :-\
От этого не только двоечники плачут :)

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "bash script find *pattern*"  +/
Сообщение от Andrey Mitrofanov on 12-Май-15, 18:57 
>> Правильный ответ: Использовать экранирование и квотирование.
>> +++Мир-труд-май. Все обижают двоечников, они обижаются на всё.
> Да лааааднаа! (С)
> Твой правильный ответ - самая ... кхм ... самая мрачная часть шелла!
> :-\
> От этого не только двоечники плачут :)

Да, осспадя, и пусть.

Туда же:
* не умеющие выбрать инструмент под задачу,
* не могущие показать преподу знание указанного им bash-а,
* смогшие показать преподу, на троечку, показное знание, но не пошедшие мести улицы по результату
** +нанявшие таковых

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "bash script find *pattern*"  +/
Сообщение от Pahanivo (ok) on 12-Май-15, 22:13 
> Твой правильный ответ - самая ... кхм ... самая мрачная часть шелла!
> :-\
> От этого не только двоечники плачут :)

не соглашусь! эта вполне себе понятная вещица ... кхм ... если включить мозг, и прочитать хотя бы бегло простой мануал по шелу. а студиоузы-халявщики ... да забили тут давно на них, тем паче что со временем тупизм и наглость вопрошающих зашкаливает все возможные лимиты.
то что в топе даже быдлокодом назвать сложно :)

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру