powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash - удалять файлы по названию старше 2 недель
9 сообщений из 9, страница 1 из 1
bash - удалять файлы по названию старше 2 недель
    #39824817
dake
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть файлы в формате
file_name_20190609.csv
file_name_20190610.csv
как мне хранить только файлы только за последние 2 недели учитываю дату из названия, а остальные удалять
поделитесь примером bash скрипта
заранее спс
...
Рейтинг: 0 / 0
bash - удалять файлы по названию старше 2 недель
    #39824840
Фотография bga83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dakeподелитесь примером bash скрипта
man bash
man find
man sort
...
Рейтинг: 0 / 0
bash - удалять файлы по названию старше 2 недель
    #39825862
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
bash - удалять файлы по названию старше 2 недель
    #39825908
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В вопросе есть одно уточнение, не позволяющее тупо юзать find
dakeкак мне хранить только файлы только за последние 2 недели учитываю дату из названия
Как вариант -- сначала получить дату в строковом виде на 2 недели назад, а затем, благо формат располагает, /*сортировать и*/ удалять тех, кто меньше при строковом сравнении

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

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

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

TS: не плохо бы указывать под какой системой весь этот колхоз
...
Рейтинг: 0 / 0
bash - удалять файлы по названию старше 2 недель
    #39825993
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать 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
bash - удалять файлы по названию старше 2 недель
    #39826004
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fandrВячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать find
пропущено...

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

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

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

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

Ну или можно потрахаться, как продемонстрировано в предыдущем посте
...
Рейтинг: 0 / 0
bash - удалять файлы по названию старше 2 недель
    #39826020
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя да, в той же солярке и 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
bash - удалять файлы по названию старше 2 недель
    #39826289
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВ вопросе есть одно уточнение, не позволяющее тупо юзать 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
9 сообщений из 9, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / bash - удалять файлы по названию старше 2 недель
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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