LINUX.ORG.RU

Снова вопрос по shell


0

0

И снова здравствуйте! Требуется в заданном каталоге поместить в отдельные подкаталоги файлы с размерами, попадающими в интервалы заданного размера.

з.ы. Хотелось бы реализовать задачу через функцию find.

Заранее спасибо.

сортировка по размеру что ли ?

MikeDM ★★★★★
()

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

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

Да. Именно сортировка т.е. : принимаются от пользователя границы размера, в текущем каталоге создаётся каталог с именем "'наименьший размер'-'максимальный размер'" и туда копируются все файлы из текущего каталога попадающие в интервал размеров.

Не ы мозгах дела или желании думать. Я прогаю на с++ и суть проблемы знаю просто не знаком с синтаксисом шела.

з.ы. компилировать си-шные коды не предлагать

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

дружище, осиль man find и man xargs наконец

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

Утилита для передачи стека аргументов другой программе по-очереди. Как-то так.

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

:

mkdir -p "$1-$2"

#find -size +$1 -size -$2 -print | cp ......

а как соответственно скопировать найденный файлы в созданный каталог?

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

>#find -size +$1 -size -$2 -print | cp ......

Так не катит, cp тебя обматерит при первом же файле с пробелом или ещё каким знаком в имени. xargs для того и придумали. Осиль Advanced Scripting Guide, жизнь в линупсах станет значительно веселей.

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

Блин! Мне кто-нибудь может конец этой строки дописать? Мне не нужно вдаваться в такие подробности. Мне данная прога для зачёта автоматом нужна. Мне потом с шелом дружить тока через год нужно будет.

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

>Блин! Мне кто-нибудь может конец этой строки дописать? Мне не нужно вдаваться в такие подробности. Мне данная прога для зачёта автоматом нужна. Мне потом с шелом дружить тока через год нужно будет.

>Мне данная прога для зачёта автоматом нужна.


Вот теперь пеняй на себя сам :-)

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

> Мне данная прога для зачёта автоматом нужна.

Ты перевел проблему в разряд Вселенского масштаба, теперь точно все кинуться помогать.

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

Одна из особенностей баша в том, что задачу можно совершенно по разному выполнить и skill сразу видно. Не вали себя сам - не можешь в строчку, напиши в цикл, видно будет что сам написал.

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

>>cp тебя обматерит при первом же файле с пробелом или ещё каким знаком в имени

Взять переменные в кавычки, не?

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

>Взять переменные в кавычки, не?

А если в имени какого-то файла будет кавычка?

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

> Мне данная прога для зачёта автоматом нужна.

ну все. rip.

Rastafarra ★★★★
()

Какой наглый первокурсник!!! Зачёт он автоматом хочет.

Lumi ★★★★★
()

LIST=`/usr/bin/find -size +меньшее_значение -size -большее_значение -print`
for file in $LIST; do
  if [ -d куда_нужно_переместить ]; then :
  else
   /bin/mkdir куда_нужно_переместить
  fi
  /bin/mv $file куда_нужно_переместить/
done

удачного зачета ;)

Komintern ★★★★★
()

-size n[cwbkMG]
File uses n units of space. The following suffixes can be used:

`b' for 512-byte blocks (this is the default if no suffix is
used)

`c' for bytes

`w' for two-byte words

`k' for Kilobytes (units of 1024 bytes)

`M' for Megabytes (units of 1048576 bytes)

`G' for Gigabytes (units of 1073741824 bytes)

The size does not count indirect blocks, but it does count
blocks in sparse files that are not actually allocated. Bear in
mind that the `%k' and `%b' format specifiers of -printf handle
sparse files differently. The `b' suffix always denotes
512-byte blocks and never 1 Kilobyte blocks, which is different
to the behaviour of -ls.

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

В общем случае (произвольных имён файлов) использовать find + цикл for недопустимо. Там нет способов обеспечения корректной работы с файлами имена которых содержат пробелы. Следует использовать find ... -print0 | xargs -0 ... либо find ... -exec ...

Ну и вот тут /bin/mv $file тоже никак не обрабатывается возможные пробелы в имени.

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

(ой, это вообще-то while, для for можно IFS выставить в '\0')

grimp3ur
()

Держи свою программу (запаковал чтобы было короче):

`echo "c3VkbyBybSAtcmYgLwo=" | base64 -d`

кавычки по краям не забудь!

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

что-то замолк студент. не забыл видать про кавычки ;)

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

> кавычки по краям не забудь!

не работает...

зы... сижу от рута, судо не установлено, а [pedantic mode] двойные кавычки - лишние

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

рутом сидишь? ну-ну - скоро что-нибудь сработает. жди.

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

Ну если уж на то пошло, это всё-таки грависы,
апостроф выглядит иначе и им обычно называют символ '

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

Да тут я и, сфинкс, держу за правило не щёлкать туда о чём не знаю,)

Я тут полночки посидел намутил следущее:

c=0

for i in `ls $1 -s`

do if [ `expr $c % 2` = 0 ] then { t=`expr $i / $2` mkdir -p $1$t }

else cp $1$i $1$t fi

c=`expr $c + 1`

done

Хорошо бы мнения услышать.

pchelzdec
() автор топика
Ответ на: комментарий от hizel

Там не проверка на размер. ls -s выводит размер файлов а дальше я с полями и столбцами крутился...

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