URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9517
[ Назад ]

Исходное сообщение
"Скрипт для очистки корзины"

Отправлено aleks2 , 03-Авг-12 09:41 
Подскажите пожалуйста на чем написан этот скрипт?
Хочу разобраться что он делает. Если не сложно то объясните плиз что именно делает этот скрипт.


Скрипт recycle.clear:
--------------------------------------------------------------
#!/bin/bash

range=`find -L /data3/ -type d -mindepth 1 -maxdepth 1 -noleaf`
for dir in $range;
do
     if [ -d $dir/.recycle ]; then
     find -L $dir/.recycle -mindepth 1 -type f -atime +7 -noleaf -exec rm -f {} \;
     find -L $dir/.recycle -mindepth 1 -type d -depth -empty -noleaf -exec rmdir --ignore-fail-on-non-empty {} \;
     fi
done
--------------------------------------------------------------


Содержание

Сообщения в этом обсуждении
"Скрипт для очистки корзины"
Отправлено Pahanivo , 03-Авг-12 13:16 
> Подскажите пожалуйста на чем написан этот скрипт?
> Хочу разобраться что он делает. Если не сложно то объясните плиз что
> именно делает этот скрипт.
> Скрипт recycle.clear:
> --------------------------------------------------------------
> #!/bin/bash
> range=`find -L /data3/ -type d -mindepth 1 -maxdepth 1 -noleaf`

ищет диры, `man find` ответит на вопрос какие именно
> for dir in $range;

цикл по списку найденый диров
> do
>      if [ -d $dir/.recycle ]; then
>      find -L $dir/.recycle -mindepth 1 -type f
> -atime +7 -noleaf -exec rm -f {} \;

ищет и грохает внутри дира
>      find -L $dir/.recycle -mindepth 1 -type d
> -depth -empty -noleaf -exec rmdir --ignore-fail-on-non-empty {} \;

аналогично
>      fi
> done

конец цикла
> --------------------------------------------------------------


"Скрипт для очистки корзины"
Отправлено XoRe , 03-Авг-12 13:47 
Скрипт написан на sh/bash - тоже самое, что *.bat/*.cmd в windows.

Используется команда find.
Вот русская документация по ней:
http://citforum.ru/operating_systems/manpages/FIND.1.shtml


"Скрипт для очистки корзины"
Отправлено aleks2 , 07-Авг-12 17:12 
range - создает какой то список?

"Скрипт для очистки корзины"
Отправлено Af. , 07-Авг-12 21:32 
> range - создает какой то список?

Это переменная. В неё записывается вывод команды
find -L /data3/ -type d -mindepth 1 -maxdepth 1 -noleaf

Два символа ` (там, где буква ё на клавиатуре, это важно) означают вызов команды заключённой между них.  Синоним этого варианта апострофов (есть ещё другой, с другим смыслом, там где буква э) будет конструкция $(команда). Сам скрипт выполняется в оболочке Bash (#!/bin/bash прямо на это указывает), что не мешает ему быть написанным на языке оболочки Sh.

Про конструции типа [ -d имя ] и подобные см. man test. Одинарные квадр. скобки это синоним вызова test.

Cтрока "for dir in $range" разворачивается так: значение range разворачивается в набор "слов" разделённых Internal Field Separator, переменной dir по очереди присваивается каждое из полученных слов, для каждого очередного значения dir выполняется тело цикла. Кстати, в той форме, как строка написана, скрывается засада - см. что есть Internal Field Separator, как Bash интерпретирует концы строк в случае оператора for, и как это соотносится с содержимым range.