Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 22.03.2019
Сообщений: 59
1

Найти в заданной директории все подкаталоги первого уровня, в которых не открыт ни один файл

16.11.2019, 21:30. Показов 2220. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Используя утилиту lsof, найдите в заданной директории все подкаталоги первого уровня, в которых
не открыт ни один файл.Найденные директории выведите по одной в строке. Если не удалось ничего найти,
то ничего не выводите и установите код возврата программы, отличный от нуля. Запуск программы
без параметров означает обработку текущей директории.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.11.2019, 21:30
Ответы с готовыми решениями:

Как получить только подкаталоги первого уровня?
Друзья, объясню на примере: указал ему каталог: D\temp\ и он ищет все папки в данной...

Вывести имена и подкаталоги первого уровня для каталога, заданного в проге
Привет народ! Срочно нужна помощь, написать прогу которая будет выводить имена и подкаталоги...

Вывести имена и подкаталоги первого уровня для каталога, заданного в проге
Привет народ! Срочно нужна помощь, написать прогу которая будет выводить имена и подкаталоги...

Написать пакетный файл, автоматически удалял бы в каталогах все подкаталоги, размер которых превышает 20 Мбайт
Помогите, пожалуйста! Написать пакетный файл, автоматически удалял бы в каталогах D: \ profiles и...

3
Эксперт NIX
3330 / 748 / 252
Регистрация: 28.06.2015
Сообщений: 1,543
Записей в блоге: 16
19.11.2019, 12:35 2
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
 
function test_dir {
        while read d; do
                if [ -f "/${d#* /}" ]; then
                        return
                fi
        done < <(lsof +d "$1")
        echo "$1"
}
declare -xf test_dir
 
dir=$(realpath -e ${1:-"./"}) || exit
find "$dir" -maxdepth 1 -mindepth 1 -type d -exec bash -c 'test_dir "{}"' \; | grep '.'
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
19.11.2019, 17:27 3
Bash
1
find ./* -prune -type d -empty
1
Эксперт NIX
3330 / 748 / 252
Регистрация: 28.06.2015
Сообщений: 1,543
Записей в блоге: 16
19.11.2019, 23:13 4
Marinero, Заманчивая возможность еще и заменить -type d на -type f и использовать
-exec lsof напрямую и обойтись без функции но пока не получается.
Нет форматированного вывода в lsof. Пока поправим только 2 последних строчки

Bash
1
2
dir=$(realpath -e ${1:-"."})/ || exit
find "$dir"* -prune -type d -exec bash -c 'test_dir "{}"' \; | grep '.'
Добавлено через 37 минут
Вот такой вариант без функции но что то результат получается другим
Bash
1
2
3
dir=$(realpath -e ${1:-"."})/ || exit
grep -xvf <(find "$dir"* -prune -type f -exec lsof {} \; | grep -o ' /.*' | sort -u) \
<(find "$dir"* -prune -type f -printf " %p\n")
Добавлено через 28 минут
Я запуталась, последнее не правильно

Добавлено через 2 часа 35 минут
Ну вот исправленная версия последнего комита, но надо заметить директория
будет считаться используемая если в ней открыты не только регулярные файлы
но и открыта хоть одна вложенная директория, что к стати совсем не противоречит
философии unix - все есть файл
Bash
1
2
3
4
5
6
#!/bin/bash
 
dir=$(realpath -e ${1:-"."})/ || exit
grep -vxFf <(find "$dir"* -prune -type d -exec lsof +d "{}" \; |
grep -o ' /.*' | xargs -d'\n' dirname | sort -u) \
<(find "$dir"* -prune -type d -printf " %p\n")
Выводы двух программ совпадают
0
19.11.2019, 23:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2019, 23:13
Помогаю со студенческими работами здесь

Удалить в заданной директории все файлы заданного расширения, размер которых больше, чем заданный пользователем
Удалить в заданной директории все файлы заданного расширения, размер которых больше, чем заданный...

Переместить все файлы заданной директории, в именах которых есть число большее, чем заданное пользователем
Есть вот такое задание Переместить все файлы заданной директории, в имени которых есть число...

Типизированный файл: Найти строки, в которых все символы заданной подстроки входят не более одного раза
Помогите, пожалуйста, сделать задачу. 1 На основе текстового файла, содержащего в каждой строке...

Удалить из заданной директории все файлы, только если в ней существует указанный файл
Удалить из заданной директории все файлы, только если в этой директории существует указанный файл....

В заданной стройке найти все слова, в которых нет заданной буквы
1.В заданной стройке найти все слова, в которых нет заданной буквы. Считать, что слова разделены...

Ошибка Файл не может быть открыт ядром базы данных microsoft jet. Файл уже открыт другим пользователем для монопольного доступа или
После написания программы, записал исходник на диск. При запуске экзешника с диска появляется такая...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru