Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87

Написать скрипт поиска файлов в подпапках разными подпроцессами

18.10.2015, 16:05. Показов 5698. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Помогите, пожалуйста, с решением задачи, ибо надо срочно сделать, а я в bash не осень разбираюсь
Задача такая:
Для заданного каталога (аргумент 1 командной строки) и всех его подкаталогов вывести в заданный файл (аргумент 2 командной строки) и на консоль имена файлов, их размер и дату создания, удовлетворяющих заданным условиям: 1 – размер файла находится в заданных пределах от N1 до N2 (N1,N2 задаются в аргументах командной строки), 2 – дата создания находится в заданных пределах от M1 до M2 (M1,M2 задаются в аргументах командной строки). Процедура поиска для каждого подкаталога должна запускаться в отдельном процессе. Каждый процесс выводит на экран свой pid, полный путь, имя, размер просмотренного файла, общее число просмотренных файлов в подкаталоге (все в одной строке). Число запущенных процессов в любой момент времени не должно превышать N (вводится пользователем). Проверить работу программы для каталога /usr/ размер 31000 31500 дата с 01.01.1970 по текущую дату N=6.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2015, 16:05
Ответы с готовыми решениями:

Написать скрипт поиска одинаковых по их содержимому файлов в двух каталогах
Пользователь задаѐт имена Dir1 и Dir2 в качестве первого и второго аргумента командной строки. В результате работы файлы, имеющиеся в...

Нужно написать скрипт поиска файлов по маске на всех дисках
Нужен поиск файлов (*.exe, *.dll, *.cfg, *.ini, *.rw, *.aw) по всем дискам и вывод их ПОЛНЫХ путей к файлам в файл output.txt Найти папку...

Скрипт поиска файлов в каталоге папок
Есть такой скрипт поиска файла в каталоге. function file_search($path, $filename) { if(($dir = opendir($path)) == FALSE) ...

17
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.10.2015, 17:38
Лучший ответ Сообщение было отмечено Sentrex как решение

Решение

Только с подпроцессами своими сами разбирайтесь!
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
#USAGE: ./script dir file min_size max_size [create_date_min [create_date_max [max_procs]]]
#outputs to FILE <PID FULL_PATH FILE_NAME FILE_SIZE TOTAL_FILES> for each subdirectory
#+in DIR by separate processes with total amout of its do not exeed MAX_PROC
 
max_procs=${7:-1}
before_date=$(date +%s -d ${6:-today)
from_date=$(date +%s -d ${5:-19700101})
 
find "$1" -type f -size +$3 -size -$4 -newerBt @$from_date ! -newerBt @$before_date \
    -execdir readlink -ne . \; \
    -printf " %f %s %C+ total " \
    -execdir bash -c 'ls -AF . | grep -cv "/$" ' \; |
tee "$2"
1
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
19.10.2015, 23:48  [ТС]
Спасибо огромное!)

Добавлено через 3 часа 51 минуту
Вобщем дело такое, что когда я пишу
sh 2l.sh выдает следующее:
Bash
1
tee: find: неверный тип '+' для -size
что это значит?
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 02:07
Попробуйте изменить команду:
Bash
1
-size +${3}c -size -${4}c
1
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 18:07  [ТС]
Мне уже даже неудобно, но все же я спрошу))
Ввожу так sh 2l.sh /usr report 1100 1111
а вот что мне выдает
Bash
1
2
find: Данная система не позволяет отыскать информацию о дате создания файла.
find: неверный предикат `-newerBt'
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 18:30
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  -newerXY reference
          Compares the timestamp of the current file with reference.  The reference argument
          is normally the name of a file (and one of its timestamps is used for the comparison)
          but it may also be a string describing an absolute time.  X and Y are placeholders for
          other letters, and these letters select which time belonging to how reference is used
          for the comparison.
 
          a   The access time of the file reference
          B   The birth time of the file reference
          c   The inode status change time of reference
          m   The modification time of the file reference
          t   reference is interpreted directly as a time
 
          Some combinations are invalid; for example, it is invalid for X to be t.  Some 
          combinations are not implemented on all systems; for  example B is not supported
          on all systems.  If an invalid or unsupported combination of XY is specified, a fatal
          error results.
Поскольку у Вас в задании сказано «дату создания» то попробуйте использовать вместо «В» например «c» или «m»
1
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 18:41  [ТС]
Если я изменяю хоть newerBt на newerct/newermt, то выдает следующее(пробовал оба и по одному)
Bash
1
find: Невозможно вычислить, как воспринимать `@' в качестве даты или времени
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 19:08
Давайте проверим. Добавьте
Bash
9
10
echo @$fromdate
date -d @$fromdate
0
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 19:10  [ТС]
добавил сразу после инициализации:
Bash
1
2
3
@
date: неверная дата «@»
find: Невозможно вычислить, как воспринимать `@' в качестве даты или времени
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 19:32
Показывайте
Bash
1
2
3
bash --version
lsb_release -a
date -d @$(date +%s -d ${9:-19700101})
0
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 19:33  [ТС]
Bash
1
2
3
4
5
6
7
8
9
10
11
12
GNU bash, версия 4.3.11(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2013 Free Software Foundation, Inc.
Лицензия GPLv3+: GNU GPL версии 3 или более поздней <http://gnu.org/licenses/gpl.html>
 
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty
Чцв Стд  1 00:00:00 MSK 1970
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 19:39
А как Вы скрипт запускаете?
0
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 19:40  [ТС]
лежит он у меня в домашней папке под именем 2l.sh
Bash
1
sh 2l.sh /usr report 1100 1111
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 19:46
Поэтому и не работатет как надо:
Bash
1
bash 2l.sh /usr report 1100 1111
или
Bash
1
source 2l.sh /usr report 1100 1111
Но самое правильное — дать права на исполнение
Bash
1
chmod +x 2l.sh
и запускать
Bash
1
$HOME/2l.sh /usr report 1100 1111
1
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 19:50  [ТС]
Bash
1
2
3
roman@roman-ubuntu:~$ chmod +x 2l.sh
roman@roman-ubuntu:~$ $HOME/2l.sh /usr report 1100 1111
find: Невозможно вычислить, как воспринимать `@' в качестве даты или времени
может из-за того, что я так поменял:
Bash
1
-newermt @$fromdate ! -newermt @$before_date
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 22:11
И ещё раз
Цитата Сообщение от Marinero Посмотреть сообщение
Давайте проверим. Добавьте
Bash
9
10
echo @$fromdate
date -d @$fromdate
0
11 / 11 / 4
Регистрация: 08.10.2015
Сообщений: 87
20.10.2015, 22:17  [ТС]
вобщем оказывается когда инициализировалась дата переменная называлась from_date, а потом использовалась без _, поэтому программа и сбоила. теперь запустилась и начала выводить что надо. Спасибо)
з.ы. а можно еще прокомментировать код, если есть время?)
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
20.10.2015, 22:33
Цитата Сообщение от Sentrex Посмотреть сообщение
прокомментировать код
Там одна команда
Bash
1
man find
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.10.2015, 22:33
Помогаю со студенческими работами здесь

Скрипт поиска файлов по заданному критерию
Как написать скрипт, осуществляющий поиск файлов по заданному пользователем критерию (имя файла, тип файла, размер файла, дата и время...

Скрипт для поиска файлов в папки по названию
Ситуация такая, некогда не в жизни не работал с PowerShell и сейчас на работе попросили написать скрипт или найти где-то. Суть скрипта...

Функция поиска в подпапках
Всем привет! procedure DirSearch(Dir: string; Mask : string; SL: TStrings); var SearchRec: TSearchRec; begin Dir :=...

Написать скрипт поиска по сайту
есть сайт http://commanline.hol.es как организовать на нем поиск

Написал скрипт для поиска дубликатов файлов, как ёё можно улучшить
Написал программу для поиска дубликатов файлов, как ёё можно улучшить, не упустил ли я какие-то не очевидные моменты которые могут привести...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru