URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10002
[ Назад ]

Исходное сообщение
"bash script find *pattern*"

Отправлено bre , 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}»
- тоже ничего не получиться.

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


Содержание

Сообщения в этом обсуждении
"bash script find *pattern*"
Отправлено Pahanivo , 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}»
> - тоже ничего не получиться.
> Как засунуть в паттерн имя файла, содержащее спец символы?

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


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


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

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

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


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

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


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

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

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


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

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