как прoстенький бат-файл преобразовать в скрипт под unix

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

callipso
Сообщения: 9
ОС: unix

как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »



есть батник, который удаляет из некой папки файлы с названием, отличным от текущей даты (формат названия файлов YYYYMMDD.log)

for /r "C:\Log\" %%i in (*.log) do if /i not "C:\Log\%date:~6,4%%date:~3,2%%date:~0,2%.log" == "%%i" del "%%i"

вопрос- как конвертируются штуки типа %date:~6,4%%date:~3,2%%date:~0,2% ?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5403
ОС: Gentoo

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение /dev/random »

callipso писал(а):
27.05.2010 08:56
вопрос- как конвертируются штуки типа %date:~6,4%%date:~3,2%%date:~0,2% ?

А что они означают? Я правильно понял, что это извлечение фрагмента переменной начиная с указанного символа, указанной длины? Если да, то %date:~6,4% - это ${date:6:4}
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

/dev/random писал(а):
27.05.2010 09:02
callipso писал(а):
27.05.2010 08:56
вопрос- как конвертируются штуки типа %date:~6,4%%date:~3,2%%date:~0,2% ?

А что они означают? Я правильно понял, что это извлечение фрагмента переменной начиная с указанного символа, указанной длины? Если да, то %date:~6,4% - это ${date:6:4}



%date:~6,4%%date:~3,2%%date:~0,2% -
всё это выражение выводит текущую дату в формате YYYYMMDD , то есть сегодня оно выведет 20100527,
нужен аналог этого в Unix, как получить текущую дату в таком формате?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

Код: Выделить всё

date +%Y%m%d
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

SLEDopit писал(а):
27.05.2010 09:30

Код: Выделить всё

date +%Y%m%d



Спасибо!
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

callipso писал(а):
27.05.2010 09:33
SLEDopit писал(а):
27.05.2010 09:30

Код: Выделить всё

date +%Y%m%d



Спасибо!



ой, это ещё не всё..
а как быть с ключем /r к for?
и ещё вот таким rd /s /q
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

callipso писал(а):
27.05.2010 08:56
есть батник, который удаляет из некой папки файлы с названием, отличным от текущей даты (формат названия файлов YYYYMMDD.log)

это можно сделать 1 командой find.
что-то вроде

Код: Выделить всё

DATE=`date +%Y%m%d`
find . ! -name "$DATE.log" -delete

(не проверил)

callipso писал(а):
27.05.2010 09:53
а как быть с ключем /r к for?

не надо тут for. есть find.
callipso писал(а):
27.05.2010 09:53
и ещё вот таким rd /s /q

ЕМНИП это соответствует rmdir. тоже не нужно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

drBatty писал(а):
27.05.2010 09:57
callipso писал(а):
27.05.2010 08:56
есть батник, который удаляет из некой папки файлы с названием, отличным от текущей даты (формат названия файлов YYYYMMDD.log)

это можно сделать 1 командой find.
что-то вроде

Код: Выделить всё

DATE=`date +%Y%m%d`
find . ! -name "$DATE.log" -delete

(не проверил)

callipso писал(а):
27.05.2010 09:53
а как быть с ключем /r к for?

не надо тут for. есть find.
callipso писал(а):
27.05.2010 09:53
и ещё вот таким rd /s /q

ЕМНИП это соответствует rmdir. тоже не нужно.


путь к папке куда писать?
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение t.t »

callipso писал(а):
27.05.2010 09:53
ой, это ещё не всё..
а как быть с ключем /r к for?
и ещё вот таким rd /s /q
Вы объясняйте по ходу, что оно всё значит. Знатоков командного языка bat-файлов тут немного.

callipso писал(а):
27.05.2010 10:01
drBatty писал(а):
27.05.2010 09:57
это можно сделать 1 командой find.
что-то вроде

Код: Выделить всё

DATE=`date +%Y%m%d`
find . ! -name "$DATE.log" -delete

(не проверил)
путь к папке куда писать?
После find вместо точки.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

t.t писал(а):
27.05.2010 10:17
callipso писал(а):
27.05.2010 09:53
ой, это ещё не всё..
а как быть с ключем /r к for?
и ещё вот таким rd /s /q
Вы объясняйте по ходу, что оно всё значит. Знатоков командного языка bat-файлов тут немного.

callipso писал(а):
27.05.2010 10:01
drBatty писал(а):
27.05.2010 09:57
это можно сделать 1 командой find.
что-то вроде

Код: Выделить всё

DATE=`date +%Y%m%d`
find . ! -name "$DATE.log" -delete

(не проверил)
путь к папке куда писать?
После find вместо точки.


вот так пойдёт? полный код (в папке Log каждый день создается файл. Имя файла имеет вид YYYYMMDD.log. Периодически эту папку надо чистить и оставлять в ней только файл соответствующий текущему дню)
echo
find C:\Log\ -name "date +%Y%m%d.log" -delete
sleep
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

callipso писал(а):
27.05.2010 10:38
вот так пойдёт? полный код (в папке Log каждый день создается файл. Имя файла имеет вид YYYYMMDD.log. Периодически эту папку надо чистить и оставлять в ней только файл соответствующий текущему дню)
echo
find C:\Log\ -name "date +%Y%m%d.log" -delete
sleep
нет, забыли восклицательный знак перед -name. Без него удалятся файлы с текущей датой.
А потом путь у вас больно странный.
и не работать еще не будет, потому что надо так:

Код: Выделить всё

find /path/to/folder ! -name `date +%Y%m%d.log` -delete
на кавычки обратите внимание, это важно.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение watashiwa_daredeska »

callipso писал(а):
27.05.2010 10:38
find C:\Log\
Цыгвин что ли?
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »


А потом путь у вас больно странный.

а как же путь прописывается?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

callipso писал(а):
27.05.2010 10:55
а как же путь прописывается?
я имею в виду, что в юниксах таких путей не бывает. хотя, если у вас cygwin, это многое объясняет (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

и ещё нужно то же самое сделать для папок,
в некой папке C:\Work\ каждый день создаётся папка с именем в формате YYYYMMDD (в папку сохраняются определенные файлы). нужно периодически внешнюю папку чистить и оставлять только папку текущего дня.


SLEDopit писал(а):
27.05.2010 10:59
callipso писал(а):
27.05.2010 10:55
а как же путь прописывается?
я имею в виду, что в юниксах таких путей не бывает. хотя, если у вас cygwin, это многое объясняет (:


ага, я поняла что не бывает, я впервые с Unix...
(к сожалению протестировать не могу, сейчас по виндой, не могли бы вы написать пример какие в Unix пути )
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

callipso писал(а):
27.05.2010 11:05
в некой папке C:\Work\ каждый день создаётся папка с именем в формате YYYYMMDD (в папку сохраняются определенные файлы). нужно периодически внешнюю папку чистить и оставлять только папку текущего дня.
да почти тоже самое.

Код: Выделить всё

find /disk/Work/ ! -name `date +%Y%m%d` -delete

callipso писал(а):
27.05.2010 11:05
(к сожалению протестировать не могу, сейчас по виндой, не могли бы вы написать пример какие в Unix пути )
/var/log
/path/to/folder
подробнее

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
BDag
Сообщения: 276
ОС: Mandriva Linux Cooker

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение BDag »

а почему не воспользоваться logrotate?
Спасибо сказали:
callipso
Сообщения: 9
ОС: unix

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение callipso »

SLEDopit писал(а):
27.05.2010 11:16
callipso писал(а):
27.05.2010 11:05
в некой папке C:\Work\ каждый день создаётся папка с именем в формате YYYYMMDD (в папку сохраняются определенные файлы). нужно периодически внешнюю папку чистить и оставлять только папку текущего дня.
да почти тоже самое.

Код: Выделить всё

find /disk/Work/ ! -name `date +%Y%m%d` -delete

callipso писал(а):
27.05.2010 11:05
(к сожалению протестировать не могу, сейчас по виндой, не могли бы вы написать пример какие в Unix пути )
/var/log
/path/to/folder
подробнее



так - так. в ваших двух примерах слэш в конце ставится или нет? в коде, который вы написали было со слешем в конце /disk/Work/
а в примерах- без, - нужен слэш?
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

callipso писал(а):
27.05.2010 12:41
так - так. в ваших двух примерах слэш в конце ставится или нет? в коде, который вы написали было со слешем в конце /disk/Work/
а в примерах- без, - нужен слэш?
по желанию. в данном случае он роли никакой не играет.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

callipso писал(а):
27.05.2010 12:41
в ваших двух примерах слэш в конце ставится или нет?

в данном случае не важно, но принято БЕЗ слеша.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение t.t »

drBatty писал(а):
27.05.2010 13:33
callipso писал(а):
27.05.2010 12:41
в ваших двух примерах слэш в конце ставится или нет?
в данном случае не важно, но принято БЕЗ слеша.
Уж так уж и принято...

Shell

$ cd tmp; ln -s ../doc/ 1 $ cd; find tmp/1 tmp/1 $ find tmp/1/ | wc -l 1038
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

t.t писал(а):
27.05.2010 14:25
Уж так уж и принято...

Shell

$ find tmp/1/ find: tmp/1/: Нет такого файла или каталога

принято-принято...
так тоже принято?
$ mkdir t/////x
а ведь - работает!
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение t.t »

drBatty писал(а):
27.05.2010 16:50
t.t писал(а):
27.05.2010 14:25
Уж так уж и принято...

Shell

$ find tmp/1/ find: tmp/1/: Нет такого файла или каталога
Хоть бы написали, что такое tmp/1...

drBatty писал(а):
27.05.2010 16:50
принято-принято...
так тоже принято?
$ mkdir t/////x
а ведь - работает!
Некорректный пример. (: Вы пишете о том, что не принято, но работает. А я написал о том, что _якобы_ "принято" (с Ваших слов), но в данном случае _не_ работает.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение SLEDopit »

Код: Выделить всё

 $ mkdir -p test/{1,2,3}
 $ touch test/{1,2,3}/{a,b,c,d}
 $ find test/1
test/1
<..>
test/1/b
 $ find test/1/
test/1/
<..>
test/1/b
 $ find test/1/a
test/1/a
 $ find test/1/a/
find: `test/1/a/': Not a directory
 $ bash --version
bash --version
GNU bash, version 4.1.5(1)-release (x86_64-pc-linux-gnu)
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение sash-kan »

когда речь идёт о каталоге, ставить в его конце слэш или не ставить — afaik, дело вкуса.

drBatty говорил о каталоге.
t.t говорит о «мягкой» ссылке.
вы бы как-то пришли бы к консенсусу, что ли.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

t.t писал(а):
27.05.2010 17:13
Хоть бы написали, что такое tmp/1...

я по вашей инструкции делал :)
t.t писал(а):
27.05.2010 17:13
Некорректный пример. (: Вы пишете о том, что не принято, но работает. А я написал о том, что _якобы_ "принято" (с Ваших слов), но в данном случае _не_ работает.

э... я писал вот о чём:
если в скрипте написать
DIR="$HOME/"
то далее обычно идёт что-нибудь
program > $DIR/output
что на самом деле
$HOME//output
это пока работает...
sash-kan писал(а):
27.05.2010 18:43
drBatty говорил о каталоге.
t.t говорит о «мягкой» ссылке.
вы бы как-то пришли бы к консенсусу, что ли.

в ссылках это тоже пока работает. я не нашёл в манах, что это будет работать всегда...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение sash-kan »

drBatty писал(а):
27.05.2010 18:54
в ссылках это тоже пока работает.
что именно «это»?

Код: Выделить всё

$ file *
link: symbolic link to `test'
test: directory
$ find link | wc -l
1
$ find link/ | wc -l
16
$ ls link | wc -l
3
$ ls link/ | wc -l
3
$ ls -l link | wc -l
1
$ ls -l link/ | wc -l
4
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

sash-kan писал(а):
27.05.2010 19:10
что именно «это»?

Код: Выделить всё

$ ln -s t//// lnk
$ ll lnk
lrwxrwxrwx 1 drb users 5 2010-05-27 19:52 lnk -> t/////
$ ll lnk/*
итого 0

работает много слешей вместо одного. но я не думаю, что это нормально.
а find в симлинк не пойдёт - там по умолчания без перехода.
а вот в симлинк со слешем - пойдёт.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение sash-kan »

drBatty писал(а):
27.05.2010 19:52
не думаю, что это нормально
а чего ж тут ненормального? просто сокращённая запись для ././././.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: как прoстенький бат-файл преобразовать в скрипт под unix

Сообщение drBatty »

sash-kan писал(а):
27.05.2010 21:11
а чего ж тут ненормального?

значит - можно?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: