Гость
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash - удалять файлы по названию старше 2 недель / 9 сообщений из 9, страница 1 из 1
10.06.2019, 10:29
    #39824817
dake
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
есть файлы в формате
file_name_20190609.csv
file_name_20190610.csv
как мне хранить только файлы только за последние 2 недели учитываю дату из названия, а остальные удалять
поделитесь примером bash скрипта
заранее спс
...
Рейтинг: 0 / 0
10.06.2019, 11:09
    #39824840
bga83
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
dakeподелитесь примером bash скрипта
man bash
man find
man sort
...
Рейтинг: 0 / 0
12.06.2019, 22:03
    #39825862
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
dake,

man find
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
...
   TESTS
       Some  tests,  for  example  -newerXY and -samefile, allow comparison between the file cur‐
       rently being examined and some reference file specified on the command line.   When  these
       tests  are used, the interpretation of the reference file is determined by the options -H,
       -L and -P and any previous -follow, but the reference file is only examined once,  at  the
       time  the  command line is parsed.  If the reference file cannot be examined (for example,
       the stat(2) system call fails for it), an error message is issued, and find exits  with  a
       nonzero status.

       Numeric arguments can be specified as

        +n     for greater than n ,

       -n     for less than n,

       n      for exactly n.
...


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
## fix modification time of file by file name
## add -c or --no-create for non exists files
$ for i in {01..12}; do echo $i;touch -c -m -t 201906${i}0122 file_name_201905$i.csv;done
01
02
03
04
05
06
07
08
09
10
11
12

## show results
$ ls -l
итого 0
-rw-r--r-- 1 lejnin lejnin 0 июн  1 01:22 file_name_20190501.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  2 01:22 file_name_20190502.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  3 01:22 file_name_20190503.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  4 01:22 file_name_20190504.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  5 01:22 file_name_20190505.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  6 01:22 file_name_20190506.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  7 01:22 file_name_20190507.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  8 01:22 file_name_20190508.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  9 01:22 file_name_20190509.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 10 01:22 file_name_20190510.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 11 01:22 file_name_20190511.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 12 01:22 file_name_20190512.csv

## find mtime greater then 6 days
$ find . -mtime +6 -print | sort 
./file_name_20190501.csv
./file_name_20190502.csv
./file_name_20190503.csv
./file_name_20190504.csv
./file_name_20190505.csv

## remove its
$ find . -mtime +6 -print -exec rm -f {} \;| sort 
./file_name_20190501.csv
./file_name_20190502.csv
./file_name_20190503.csv
./file_name_20190504.csv
./file_name_20190505.csv

## show
$ ls -l
итого 0
-rw-r--r-- 1 lejnin lejnin 0 июн  6 01:22 file_name_20190506.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  7 01:22 file_name_20190507.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  8 01:22 file_name_20190508.csv
-rw-r--r-- 1 lejnin lejnin 0 июн  9 01:22 file_name_20190509.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 10 01:22 file_name_20190510.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 11 01:22 file_name_20190511.csv
-rw-r--r-- 1 lejnin lejnin 0 июн 12 01:22 file_name_20190512.csv
...
Рейтинг: 0 / 0
13.06.2019, 06:19
    #39825908
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
В вопросе есть одно уточнение, не позволяющее тупо юзать find
dakeкак мне хранить только файлы только за последние 2 недели учитываю дату из названия
Как вариант -- сначала получить дату в строковом виде на 2 недели назад, а затем, благо формат располагает, /*сортировать и*/ удалять тех, кто меньше при строковом сравнении

Дату можно получить, например, GNU-шным date (date -d 'now-14days' +'%Y%m%d') или тем-же AWK. Хотя, конечно, можно потрахаться и с арифметикой дней/месяцев/годов
...
Рейтинг: 0 / 0
13.06.2019, 09:31
    #39825979
fandr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
Вячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать find
dakeкак мне хранить только файлы только за последние 2 недели учитываю дату из названия
Как вариант -- сначала получить дату в строковом виде на 2 недели назад, а затем, благо формат располагает, /*сортировать и*/ удалять тех, кто меньше при строковом сравнении

Дату можно получить, например, GNU-шным date (date -d 'now-14days' +'%Y%m%d') или тем-же AWK. Хотя, конечно, можно потрахаться и с арифметикой дней/месяцев/годов

в этом собственно и вопрос,
функция вычисления даты "now -2weeks" - в общем случае не тривиальная

TS: не плохо бы указывать под какой системой весь этот колхоз
...
Рейтинг: 0 / 0
13.06.2019, 10:10
    #39825993
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
Вячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать find
dakeкак мне хранить только файлы только за последние 2 недели учитываю дату из названия
Как вариант -- сначала получить дату в строковом виде на 2 недели назад, а затем, благо формат располагает, /*сортировать и*/ удалять тех, кто меньше при строковом сравнении

Дату можно получить, например, GNU-шным date (date -d 'now-14days' +'%Y%m%d') или тем-же AWK. Хотя, конечно, можно потрахаться и с арифметикой дней/месяцев/годов


Чтобы не считать, делаем циклы по годам/месяцам/дням

Генерим синтетическую дату и проверям наличие файла

Вот скрипт накатал
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
$ cat t.sh
#!/bin/bash
FILEMASK=file_name_
for yyyy in `date +%Y` $(((`date +%Y` - 1 )))
do for mm in {01..12}
  do for dd in {01..31}
   do 
MYDT=${yyyy}${mm}${dd}
MYFILE=${FILEMASK}${MYDT}.csv
test -w $MYFILE && touch  -m -t ${MYDT}0122 $MYFILE
   done
  done
done

find . -name ${FILEMASK}'20[0-9][0-9][01][0-9][0-9][0-9].csv' -mtime +13 -print



Если заменить for шаблоны типа
Код: sql
1.
{01..31}

на простой список
Код: sql
1.
01 02 03 ... 31

и башовскую кракозябру
Код: sql
1.
$(((`date +%Y` - 1 )))



на
Код: sql
1.
$(expr `date +%Y` - 1)



То будет практически POSIX
...
Рейтинг: 0 / 0
13.06.2019, 10:30
    #39826004
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
fandrВячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать find
пропущено...

Как вариант -- сначала получить дату в строковом виде на 2 недели назад, а затем, благо формат располагает, /*сортировать и*/ удалять тех, кто меньше при строковом сравнении

Дату можно получить, например, GNU-шным date (date -d 'now-14days' +'%Y%m%d') или тем-же AWK. Хотя, конечно, можно потрахаться и с арифметикой дней/месяцев/годов

в этом собственно и вопрос,
функция вычисления даты "now -2weeks" - в общем случае не тривиальная

TS: не плохо бы указывать под какой системой весь этот колхозЧто тут нетривиального?
Я привел один способ прямой (через GNU date), второй -- чуть подумать (через AWK)

Ну или можно потрахаться, как продемонстрировано в предыдущем посте
...
Рейтинг: 0 / 0
13.06.2019, 10:59
    #39826020
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
Хотя да, в той же солярке и awk резанный, но можно установить гнутый
Код: plaintext
1.
2.
3.
4.
5.
6.
Oracle Corporation      SunOS 5.11      11.3    February 2018
lubomudr@chaos:~$ awk 'BEGIN { print strftime("%Y%m%d", systime()-14*24*60*60) }'
awk: syntax error near line 1
awk: illegal statement near line 1
lubomudr@chaos:~$ gawk 'BEGIN { print strftime("%Y%m%d", systime()-14*24*60*60) }'
20190530
...
Рейтинг: 0 / 0
13.06.2019, 17:50
    #39826289
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
bash - удалять файлы по названию старше 2 недель
Вячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать find
dakeкак мне хранить только файлы только за последние 2 недели учитываю дату из названия
Найдено в поиске "man find"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Expressions
Valid expressions are:
...
 -name pattern

    True if pattern matches the basename of the current file name.
    Normal shell file name generation characters (see sh(1)) can be used.
    A backslash (\) is used as an escape character within the pattern.
    The pattern should be escaped or quoted when find is invoked from the shell.

    Unless the character '.' is explicitly specified in the beginning of pattern,
    a current file name beginning with '.' does not match pattern when using
    /usr/bin/find. /usr/xpg4/bin/find does not make this distinction; wildcard
    file name generation characters can match file names beginning with '.'
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash - удалять файлы по названию старше 2 недель / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]