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

Подсчитать количество файлов и отсортировать их

15.10.2018, 22:27. Показов 6285. Ответов 41
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с заданием, уже неделю мучаюсь, ничего не получается...
В папке хранятся txt файлы, нужно подсчитать их количество, и если оно четное, то вывести названия файлов отсортированные по времени создания по убыванию(вывод в файл), а иначе вывести отсортированные по увеличению размера.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2018, 22:27
Ответы с готовыми решениями:

Найти количество чисел Фибоначчи в массиве. Отсортировать по убыванию все столбцы матрицы. Подсчитать количество слов в
Друзья, помогите пожалуйста. 1. Используя функции сформировать с помощью ДСЧ одномерный массив и вывести его на печать. 2. Выполнить...

Подсчитать количество файлов для каждого из имеющихся расширений файлов
Подсобите) - посчитать все разрешения файлов в текущем каталоге и вывести - файлов типа - jpeg - 20 , gif - 42 и тд, и все это записать в...

Отсортировать массив и подсчитать количество уникальных чисел в массиве
Что не так????????????? #include <clx.h> #pragma hdrstop #include <clx.h> #pragma hdrstop #include<iostream.h> ...

41
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
16.10.2018, 09:28
Ну дык коли вы действительно "мучались", приведите результат этих мучений. И да, где вы встречали время создания файла в Linux?
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
17.10.2018, 00:38  [ТС]
...

Добавлено через 2 минуты
Цитата Сообщение от greg zakharov Посмотреть сообщение
Ну дык коли вы действительно "мучались", приведите результат этих мучений. И да, где вы встречали время создания файла в Linux?
Я не встречал там время создания, у меня лаба такая...
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
17.10.2018, 09:28
Вот, ответ на один вопрос вы уже дали. Однако собственные наработки вы так и не представили: вы же не в университете, так что если вы даже ошиблись в чем-то бить по рукам вас никто не будет, скорее поправят и подскажут как лучше. В противном случае вы так ничему не научитесь.
1
17.10.2018, 15:47

Не по теме:

А вот любопытно, кто-нибудь встречал объяснения от создателей системы или от последователей,
почему отсутствует данный временный атрибут ( Creation Date ) ?

0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
17.10.2018, 17:45  [ТС]
Цитата Сообщение от greg zakharov Посмотреть сообщение
Вот, ответ на один вопрос вы уже дали. Однако собственные наработки вы так и не представили: вы же не в университете, так что если вы даже ошиблись в чем-то бить по рукам вас никто не будет, скорее поправят и подскажут как лучше. В противном случае вы так ничему не научитесь.
Bash
1
2
3
4
a = $ find . -type f -name "*.txt" | wc -l
let "a = a % 2"
if [[a == 0]]; then ОТСОРТИТЬ ПО ВРЕМЕНИ СОЗДАНИЯ(УБЫВАНИЕ)
else НУЖНО ОТСОРТИТЬ ПО РАЗМЕРУ(ВОЗРАСТАНИЕ)
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
17.10.2018, 19:49
Первое, что нужно учесть - между именем переменной, знаком равенства, а также правосторонним выражением пробелы не допускаются. Второе - квадратные скобки имеют особое значение (по сути это расширенная версия команды test), корректным синтаксисом в данном случае будет [[ выражение ]] - пробелы обязательны.
Что касается самого задания. С учетом того, что не было оговорено требуется ли рекурсивный поиск файлов в данном случае, но в приведенном вами коде была употреблена команда find, будем считать что рекурсия имеет место быть. Итак, с поиском файлов вы разобрались самостоятельно, однако лучше поступить так:
Bash
1
arr=($(find . -type f -name '*.txt'))
Переменная $arr - массив имен искомых файлов. Вполне допустим сценарий, когда файлов с указанным расширением может и не оказаться, поэтому первым условие в if будет:
Bash
1
2
if [[ ${#arr[@]} -eq 0 ]]; then
   echo Файлов заданному критерию не найдено.
Конструкция ${#arr[@]} раскрывается в количество элементов массива. Если массив не пуст, проверяем количество его элементов на четность:
Bash
1
2
3
4
elif [[ $((${#arr[@]} % 2)) -eq 0 ]]; then
   while read -r line; do
      stat -c '%Y %n' $line
   done <<< ${arr[*]} | sort -nr | cut -d ' ' -f2
Если количество элементов все же четное, для каждого из имен массива получаем время модификации файла (времени создания, как помним, в Linux нет), сортируем по этой дате (представленной числом) и, отсекая дату, выводим только имена файлов. По аналогии поступаем в противном случае:
Bash
1
2
3
4
5
else
   while read -r line; do
      stat -c '%s %n' $line
   done <<< ${arr[*]} | sort -n | cut -d ' ' -f2
fi
Обратите внимание на параметры команд stat и sort (подробнее - man stat, man sort).
Оптимизировать пример предлагаю самостоятельно.
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
17.10.2018, 20:22  [ТС]
Рекурсия не нужна

Добавлено через 14 минут
Там именно файлы в данной папке обрабатывать нужно, видимо я не ту команду подсчета нашел
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
17.10.2018, 20:32
Bash
1
[[ $(($(ls -1q *.txt | wc -l) % 2)) -eq 0 ]] && ls -gt *.txt || ls -grS *.txt
1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
17.10.2018, 20:50
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
 
dir=/path/to/dir
 
if (( $( ls $dir | wc -l ) % 2 )) ; then
        ls -Sr $dir > log.txt
else
        ls -t $dir > log.txt
fi
1
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
17.10.2018, 21:00
Цитата Сообщение от greg zakharov Посмотреть сообщение
[[ $(($(ls -1q *.txt | wc -l) % 2)) -eq 0 ]]
Bash
1
(($(ls -1q *.txt | wc -l) % 2)) && ...
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
22.10.2018, 18:06  [ТС]
Цитата Сообщение от greg zakharov Посмотреть сообщение
Первое, что нужно учесть - между именем переменной, знаком равенства, а также правосторонним выражением пробелы не допускаются. Второе - квадратные скобки имеют особое значение (по сути это расширенная версия команды test), корректным синтаксисом в данном случае будет [[ выражение ]] - пробелы обязательны.
Что касается самого задания. С учетом того, что не было оговорено требуется ли рекурсивный поиск файлов в данном случае, но в приведенном вами коде была употреблена команда find, будем считать что рекурсия имеет место быть. Итак, с поиском файлов вы разобрались самостоятельно, однако лучше поступить так:
Bash
1
arr=($(find . -type f -name '*.txt'))
Переменная $arr - массив имен искомых файлов. Вполне допустим сценарий, когда файлов с указанным расширением может и не оказаться, поэтому первым условие в if будет:
Bash
1
2
if [[ ${#arr[@]} -eq 0 ]]; then
   echo Файлов заданному критерию не найдено.
Конструкция ${#arr[@]} раскрывается в количество элементов массива. Если массив не пуст, проверяем количество его элементов на четность:
Bash
1
2
3
4
elif [[ $((${#arr[@]} % 2)) -eq 0 ]]; then
   while read -r line; do
      stat -c '%Y %n' $line
   done <<< ${arr[*]} | sort -nr | cut -d ' ' -f2
Если количество элементов все же четное, для каждого из имен массива получаем время модификации файла (времени создания, как помним, в Linux нет), сортируем по этой дате (представленной числом) и, отсекая дату, выводим только имена файлов. По аналогии поступаем в противном случае:
Bash
1
2
3
4
5
else
   while read -r line; do
      stat -c '%s %n' $line
   done <<< ${arr[*]} | sort -n | cut -d ' ' -f2
fi
Обратите внимание на параметры команд stat и sort (подробнее - man stat, man sort).
Оптимизировать пример предлагаю самостоятельно.
А можно без рекурсии? Просто она мне не нужно, а find я использовал видимо о не знания
0
Покинул форум
3700 / 1483 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
22.10.2018, 18:47
Algorithmic, пример без рекурсии, с использованием ls, был приведен выше, Marinero любезно поправил пример, а nezabudka и вовсе расписала вам все подробно.
1
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
22.10.2018, 19:25  [ТС]
Как тут сделать, чтобы выводилось в столбик и только названия, и только файлов txt?
Bash
1
2
3
4
5
cnt=$(find . -type f -name "*.txt" | wc -l)
let cnt%=2
if [[ $cnt -eq 0 ]]; then ls $dir > Names.txt    
else ls -t $dir > Names.txt
fi
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
23.10.2018, 11:34  [ТС]
Цитата Сообщение от nezabudka Посмотреть сообщение
Bash
1
2
3
4
5
6
7
8
9
#!/bin/bash
 
dir=/path/to/dir
 
if (( $( ls $dir | wc -l ) % 2 )) ; then
        ls -Sr $dir > log.txt
else
        ls -t $dir > log.txt
fi
Как тут сделать, чтобы выводилось в столбик и только названия, и только файлов txt?
Bash
1
2
3
4
5
cnt=$(find . -type f -name "*.txt" | wc -l)
let cnt%=2
if [[ $cnt -eq 0 ]]; then ls -Sr $dir > Names.txt    
else ls -t $dir > Names.txt
fi
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
23.10.2018, 12:28
Лучший ответ Сообщение было отмечено Algorithmic как решение

Решение

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
#/bin/bash
 
dirlog=/path/to/log/
dir=/home/nez/bash/
patt='*.txt'
 
cd $dir
 
if (( $( ls $patt | wc -l ) % 2 )) ; then
        ls -Sr $patt > ${dirlog}log.txt
else
        ls -t $patt > ${dirlog}log.txt
fi
Добавлено через 11 минут
Цитата Сообщение от Algorithmic Посмотреть сообщение
Как тут сделать, чтобы выводилось в столбик и только названия, и только файлов txt?
Bash
1
2
3
4
5
cnt=$(find $dir -maxdepth 1 -type f -name "*.txt" | wc -l)
let cnt%=2
if [[ $cnt -eq 0 ]]; then find $dir -maxdepth 1 -type f -name "*.txt" -printf "%f\n" > Names.txt
        else find $dir -maxdepth 1 -type f -name "*.txt" -printf "%f\n" > Names.txt
fi
Добавлено через 15 минут
С последним это я погорячилась )))
Bash
1
2
3
4
5
6
7
8
cd $dir
cnt=$(ls *.txt | wc -l)
let cnt%=2
if [[ $cnt -eq 0 ]]; then
    ls -Sr *.txt > Names.txt
else
    ls -t *.txt > Names.txt
fi
0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
23.10.2018, 15:42  [ТС]
Спасибо, только выводит все в одну строчку и без пробелов, как сделать переход на новую строку???
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
23.10.2018, 16:01
Algorithmic, Попробуйте команду ls запускать с опцией "один", вот так ls -1 и дальше все остальное.
Иначе покажите полностью программу которую запускаете
и вывод ее результатов в файл.

Добавлено через 6 минут

Не по теме:

Пожалуйста цитируйте места имеющие отношение к вопросу
не захламляйте страницу

0
0 / 0 / 0
Регистрация: 15.10.2018
Сообщений: 20
23.10.2018, 16:05  [ТС]
Bash
1
2
3
4
5
6
cnt=$(ls *.txt | wc -l)
let cnt%=2
echo $cnt
if [[ $cnt -eq 0 ]]; then ls -Sr *.txt > Names.txt
else ls -t *.txt > Names.txt
fi
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
23.10.2018, 16:12
Вот так работает?
Bash
1
2
3
4
5
6
7
8
cnt=$(ls -1 *.txt | wc -l)
let cnt%=2
echo $cnt
if [[ $cnt -eq 0 ]]; then
    ls -1 -Sr *.txt > Names.txt
else
    ls -1 -t *.txt > Names.txt
fi
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2018, 16:12
Помогаю со студенческими работами здесь

Отсортировать слова в предложении по алфавиту и подсчитать количество слов
отсортировать слова в предложении по алфавиту и подсчитать количество слов

Отсортировать данный массив и подсчитать количество уникальных чисел в массиве
Задание: Отсортировать данный массив и подсчитать количество уникальных чисел в массиве. Внимание! Входные данные и выходные данные...

Отсортировать 5 массивов пирамидальной сортировкой и подсчитать количество сравнений и обменов
Отсортировать массивы h1,h2,h3,h4,h5 с помощью пирамидальной сортировки и подсчитать количество сравнений и обменов для среднего,...

Подсчитать размер и количество файлов
Нужно написать скрипт подсчитывающий суммарный размер файлов в заданном каталоге и всех его подкаталогах (имя каталога задаётся...

Подсчитать количество файлов в папке
Где здесь ошибка, текст ошибки : &quot;Warning: opendir(./music/,./music/) : The system cannot find the file specified. (code: 2) in ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 17.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru