LINUX.ORG.RU

РАЗРАБОТКА СЦЕНАРИЕВ BASH

 


1

4

В текущем каталоге найти количество файлов, имеющих различные имена, но одинаковые размеры. Вывести на экран величину размера и имена файлов, имеющих данный размер.


Домашнее задание надо делать самостоятельно.

tiandrey ★★★★★ ()

У Саши было 8 яблок, а у Маши - 2. За сколько яблок Маша даст Саше, если у неё есть ещё и 3 огурца?

Deleted ()
find ./ -size 1024c -printf '%s %P\n'|awk '{ print $0; count++;} END {print "Total:" count;}'
vasyan ()

ТЫ МНЕ ТУТ НЕ ПРИКАЗЫВАЙ

t184256 ★★★★★ ()

$35. Это только потому, что у тебя нет звёзд. Дальше будет дороже.

РАЗРАБОТКА СЦЕНАРИЕВ BASH

Я передумал, $50. Наценка за капс.

$55, ибо ты ошибся разделом.

r3lgar ★★★★★ ()
Последнее исправление: r3lgar (всего исправлений: 2)

Что значит вывести, только пришли же

Bruce_Lee ★★ ()
Ответ на: комментарий от Allakka

А на perl сколько будет стоить?

Два грамма. xD

r3lgar ★★★★★ ()
Ответ на: комментарий от Deleted

Не даст, с тремя-то огурцами огого как можно!

Zhbert ★★★★★ ()
for SIZE in `find . -maxdepth 1 -type f -exec stat --printf="%s\n" {} \; | uniq`; do echo -ne "Size: ${SIZE}\nFiles: "; find . -maxdepth 1 -type f -size ${SIZE}c | xargs echo; echo; done
Size: 10
Files: ./a ./b

Size: 11
Files: ./c
driver ()
Ответ на: комментарий от Zhbert

Не мог сдержаться, но..

И ага, команда — отличный детектор. Ни на одном линуксе не заработает сейчас. А ведь найдётся умник зарепортит в l-o-r, а другой, еще умнее удалит.

KennyMinigun ★★★★★ ()

Вероятно, следующая тема будет с таким содержанием:

В текущем каталоге и его подкаталогах найти файлы, созданные в течение последней недели.

Нагуглил его задачник :) «Лб 10 Разработка сценариев bash.doc»

driver ()

На будущее. Здесь мало кто согласен делать чужие домашки забесплатно. Другое дело, если у тебя есть какие-то конкретные и адекватные вопросы - это всегда пожалуйста. Что-то непонятно - спрашивай.

Black_Shadow ★★★★★ ()
Последнее исправление: Black_Shadow (всего исправлений: 1)
Ответ на: комментарий от driver

У меня есть подозрение, что вот такой стеб: пришли с «лабой» — выдай лютый говнокод — он во-первых, просто не работает, в том в смысле, задачку у него вполне себе примут, а во-вторых вреден для вселенского разума — рано или поздно это кто-то нагуглит да и примет за чистую монету.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zhbert

Не мог сдержаться, но..
rm -rf /

Я тут подумал, что, если это обернуть в легендарный однострочник, а человек не проверив запустит это в компьютерном классе... То получит объективную и непредвзятую оценку от преподавателя...

Kroz ★★★★★ ()
Ответ на: комментарий от Zmicier

У меня есть подозрение, что вот такой стеб

Никакого стёба! Баш для меня та отдушина, которая позволяет не думать о красоте и эффективности. Баш - это одновременно уродство и сила односрочных write-only скриптов. Если это нужно один раз, твой выбор - баш. Наговнякал в одну строку прямо в терминале, получил результат и забыл.

он во-первых, просто не работает

Замечательно он работает. Ну, результат выдает тот, что требуется в задаче, попутно ничего не ломается и не калечится. По-моему, он прекрасен в своем уродстве и неэффективности - эталонный экземпляр.

вреден для вселенского разума — рано или поздно это кто-то нагуглит да и примет за чистую монету

Сделаю исключение, но только ради вселенского разума.

#!/usr/bin/env bash
if [ $# -eq 0 ] || [ ! -d $1 ]; then
    echo "Usage: $0 dir" 
    exit 1
fi
declare -A filesBySize
for fileName in `ls -pa $1 | grep -v /`; do
    fileSize=`stat -c%s $1/$fileName`
    filesBySize[$fileSize]="${filesBySize[$fileSize]}${filesBySize[$fileSize]:+, }$fileName"
done
for fileSize in "${!filesBySize[@]}"; do
    echo "Файлы с размером $fileSize байт: ${filesBySize[$fileSize]}";
done
popcorn@workstation ~/fun $ ls -la
total 52
drwxr-xr-x  3 popcorn users 4096 May  8 04:50 .
drwx------ 23 popcorn users 4096 May  8 03:58 ..
-rw-r--r--  1 popcorn users   10 May  8 04:45 a
-rw-r--r--  1 popcorn users   13 May  8 04:45 b
-rwxr-xr-x  1 popcorn users  435 May  8 04:51 bashmap.sh
-rw-r--r--  1 popcorn users   11 May  8 04:45 c
-rw-r--r--  1 popcorn users   10 May  8 04:45 d
-rw-r--r--  1 popcorn users   11 May  8 04:45 e
-rw-r--r--  1 popcorn users   13 May  8 04:45 f
-rw-r--r--  1 popcorn users   12 May  8 04:45 g
-rw-r--r--  1 popcorn users   10 May  8 04:45 h
-rw-r--r--  1 popcorn users   11 May  8 04:50 .hiddenfile
drwxr-xr-x  2 popcorn users 4096 May  8 04:45 somedirectory
popcorn@workstation ~/fun $ ./bashmap.sh .
Файлы с размером 435 байт: bashmap.sh
Файлы с размером 13 байт: b, f
Файлы с размером 12 байт: g
Файлы с размером 11 байт: c, e, .hiddenfile
Файлы с размером 10 байт: a, d, h

ЗЫ. awk - читтерство

driver ()
Ответ на: комментарий от driver

Ну, ты же понимаешь, что у тебя не выполнены ФУНДАМЕТАЛЬНЫЕ ТРЕБОВАНИЯ, заявленные в первом предложении:

  1. Где количество файлов?
  2. Кто тебе разрешил выводить файлы, присутствующие только в одном экземпляре --->>>Файлы с размером 12 байт: g<<<---
justAmoment ★★★★★ ()
Последнее исправление: justAmoment (всего исправлений: 1)
Ответ на: комментарий от Kroz

Если преподаватели к такому технически не готовы — грош цена...

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 1)
Ответ на: комментарий от justAmoment

Где количество файлов?

В уме.

Задача звучит так:

Вывести на экран величину размера и имена файлов, имеющих данный размер.

Кто тебе разрешил выводить файлы, присутствующие только в одном экземпляре --->>>Файлы с размером 12 байт: g<<<---

Множество состоящее из одного элемента.

driver ()
Ответ на: комментарий от driver

Множество состоящее из одного элемента.

В котором есть файлы имеющие

различные имена, но одинаковые размеры.

?

mogwai ★★★★ ()
Ответ на: комментарий от mogwai

Множество состоящее из одного элемента.

В котором есть файлы имеющие

различные имена, но одинаковые размеры.

?

Верно, файл g относится к множеству «12 байт» и имя этого файла уникально (это значит, что нет других файлов с таким же именем). Условие задачи выполняется.

driver ()
Ответ на: комментарий от driver

Не похоже.

В текущем каталоге найти количество файлов, имеющих различные имена, но одинаковые размеры. Вывести на экран величину размера и имена файлов, имеющих данный размер.

файлов, имеющих различные имена, но одинаковые размеры.

Может быть минимум два.

Вывести на экран … имена файлов, имеющих данный размер.

Т. е. файлов, количество которых ты считал для выполнения первой части задания.

Каким образом тут «множество из одного элемента» может появиться?

mogwai ★★★★ ()
Ответ на: комментарий от mogwai

Уловка тут может быть только одна: выводить нужно только файлы для которых хардлинки есть.

Но, думаю, что к моменту поступления подобных лабораторных, ТС должен уже вылететь из вуза со свистом.

mogwai ★★★★ ()
Ответ на: комментарий от mogwai

Не похоже.

Похоже.

Может быть минимум два.

Может быть минимум один.

Каким образом тут «множество из одного элемента» может появиться?

А каким образом оно может исчезнуть?

Вывести на экран … имена файлов, имеющих данный размер.

Т. е. файлов, количество которых ты считал для выполнения первой части задания.

Файлов - 1 штука. Количество файлов выводить не нужно. Выводить нужно их размер и их имена.

Читай внимательнее:

Вывести на экран величину размера и имена файлов, имеющих данный размер.

driver ()
Ответ на: комментарий от driver

Если файл с таким размером один, каким образом он станет одним из «файлов имеющих различные имена но один размер»?

А если файл с таким размером один, каким образом эта величина попадает в список совпадающих размеров файлов с разными именаии?

mogwai ★★★★ ()
Последнее исправление: mogwai (всего исправлений: 1)
Ответ на: комментарий от Zmicier

а во-вторых вреден для вселенского разума — рано или поздно это кто-то нагуглит да и примет за чистую монету.

Кому это может понадобиться, кроме такого же студента с лабой?

crutch_master ★★★★★ ()
Ответ на: комментарий от mogwai

Читай внимательнее, я уже отвечал на этот вопрос. Имя файла уникально, а значит оно не может быть не различно. Условие задачи выполняется.

driver ()
Ответ на: комментарий от driver

Ты это преподавателю втирай, пока не разозлишь его и неуд не схлопочешь. Перед нами зачем как уж на сковородке вертишься?

mogwai ★★★★ ()
Ответ на: комментарий от mogwai

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

crutch_master ★★★★★ ()
Последнее исправление: crutch_master (всего исправлений: 1)

специально для вселенского разума

если нужно только с одинаковыми размерами без одиночных, то как то так

for SIZE in `find .  -maxdepth 1 -type f -printf '%s\n'|sort -n|uniq -D|uniq`;do echo -ne "Size $SIZE. Files:";find . -maxdepth 1 -type f -size ${SIZE}c -printf "%P ";echo;done

vasyan ()
Ответ на: комментарий от mogwai

Ты это преподавателю втирай, пока не разозлишь его и неуд не схлопочешь.

Что именно и кому именно втирать вы мне предлагаете? Можно поподробнее?

Перед нами зачем как уж на сковородке вертишься?

Я сижу на стуле. Это у вас в глазах что-то вертится.

driver ()
Ответ на: комментарий от mogwai

Вообще-то я предоставил два эталонных варианта решения задачи. А вам, видимо, что-то непонятно в её формулировке. Впрочем, это не моя проблема, жить с этим вам. Выздоравливайте.

driver ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.