Подскажите пожалуйста на чем написан этот скрипт?
Хочу разобраться что он делает. Если не сложно то объясните плиз что именно делает этот скрипт.
Скрипт recycle.clear:
--------------------------------------------------------------
#!/bin/bashrange=`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
--------------------------------------------------------------
> Подскажите пожалуйста на чем написан этот скрипт?
> Хочу разобраться что он делает. Если не сложно то объясните плиз что
> именно делает этот скрипт.
> Скрипт 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конец цикла
> --------------------------------------------------------------
Скрипт написан на sh/bash - тоже самое, что *.bat/*.cmd в windows.Используется команда find.
Вот русская документация по ней:
http://citforum.ru/operating_systems/manpages/FIND.1.shtml
range - создает какой то список?
> 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.