Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » UNIX » Bash-скрипт поиска файлов

Модерирует : ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

unRefraction

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вечер добрый.
Опишу суть задания:
В качестве параметров указывается строка и начальная директория поиска, с условием, что скрипт будет обрабатывать каталоги, в именах которых есть пробелы. Скрипт должен найти все файлы в каталоге и подкаталогах, в которых есть эта строка, вывести полный путь к файлу  и их размер. Если к каталогу нет доступа - вывести сообщение и продолжить поиск. Т.е. вывести ошибку открытия надо не средствами грепа, а вручную через условие возврата 1 функцией.
Собственно проблема с последним пунктом.  
Если поиск файлов и вывод их с размером делается след образом:
fgrep -lrZs $1 $2 | xargs -0 du -b
то как вывести вручную ошибки открытия каталогов я не знаю.
Если делать через цикл for, то задача упрощается, но в случае, если попадется каталог с пробелом в имени, то в переменную i попадет только часть пути до пробела. Хотя возможно я не правильно задаю условие цикла. При  
for i in `find $2`  
в i заносится только кусок пути.  При
for i in "`find $2`"  
в i заносится строка со всеми путями.
Очень нужна помощь с данной задачей. К концу недели надо сдать, а идей больше нету.

Всего записей: 2 | Зарегистр. 23-03-2010 | Отправлено: 19:59 23-03-2010
SysCommander

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
for i in `find` - это типичный bash pitfall.
Вот полезная ссылка где описано многи типичных ошибок: http://mywiki.wooledge.org/BashPitfalls
 
можно использовать такую конструкцию:
 

Код:
 
find "$1"  -type f -print0 | \
while read -d '' FILE; do
    abs_file_name=$(readlink -f "$FILE")
    echo "$abs_file_name"
done
 

 
про ключевую опцию -print0 можно почитать в man find
readlink -f - это хак для конверсии относительного пути в абсолютный. В мане написано что это для символических ссылок (symbolic links), это которые создаются командой ln -s, но работает и для нужного преобразования.

Всего записей: 421 | Зарегистр. 20-07-2007 | Отправлено: 20:14 23-03-2010
unRefraction

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
while read -d '' FILE; do  

будьте добры, объясните принцип работы данной строки.  
В мане по данной функции я не разобрался, а в своем справочнике я её не нашел.
Также интересует момент с преобразования пути к абсолютному. Так ли оно важно? Закомментировав строку, я получил тот же результат.
А за приведенную вами конструкцию большое спасибо. Работает отлично.

Всего записей: 2 | Зарегистр. 23-03-2010 | Отправлено: 21:37 23-03-2010 | Исправлено: unRefraction, 23:41 23-03-2010
SysCommander

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
объясните принцип работы данной строки.  
В мане по данной функции я не разобрался, а в своем справочнике я её не нашел.

 
В мане по какой функции?
read - это bash builtin. Смотреть man bash, раздел 'SHELL BUILTIN COMMANDS'
 

Цитата:
Также интересует момент с преобразования пути к абсолютному.

А это - бесплатный бонус. Иногда может возникнуть необходимость преобразования в абсолютные пути при работе с относительными путями. Я подсказал неочевидное (для меня, потому что в свое время сам наступил на эти грабли, пока не нагуглил про readlink) решение.

Всего записей: 421 | Зарегистр. 20-07-2007 | Отправлено: 10:01 24-03-2010
telstrol

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
будьте добры, объясните принцип работы данной строки.  
В мане по данной функции я не разобрался, а в своем справочнике я её не нашел.  
Также интересует момент с преобразования пути к абсолютному. Так ли оно важно? Закомментировав строку, я получил тот же результат.  
А за приведенную вами конструкцию большое спасибо. Работает отлично.

 
На opennet'е есть отличная, а главное большая и доступная статья по bash scripting. Советую с ней ознакомиться.




неоплаченная реклама, имитация подписи запрещены. /ShriEkeR/

Всего записей: 1 | Зарегистр. 25-03-2010 | Отправлено: 13:00 25-03-2010 | Исправлено: ShriEkeR, 14:15 28-03-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Операционные системы » UNIX » Bash-скрипт поиска файлов


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru