LINUX.ORG.RU

Подскажите по Линуксу

 


0

1

Доброго времени суток, задача такая нужно файлы в определенной директории которые открывались больше месяца назад перенести в другую директорию, собственно сделать из этого скрипт и через кронтаб что бы каждый день он это проверял попробовал написать код, в линуксе особо не разбираюсь по этому прошу совета.

сам код

#! bin/bash

find admin/(папка с файлами)/ type f atime +30 -exec mv admin/(папка куда нужно перенести) \;
так же в кронтабе я прописал 13 * * * * и путь к данному коду, код сделал исполняемым, но всё равно не пашет, подскажите что не так..



Последнее исправление: beastie (всего исправлений: 1)

Ответ на: комментарий от targitaj

Нет, проверку не делал, я просто, не особо в курсе как и что именно делать, код написал чисто из поиска по интернету, сейчас попробовал ругается find: -exec requires an argument

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

Ну если не работает в консоли, то и в кроне работать не будет.

find admin/(папка с файлами)/ -type f -atime +30 -exec mv {}  admin/(папка куда нужно перенести) \;
turtle_bazon ★★★★★
()
Ответ на: комментарий от turtle_bazon

ну это логично, собственно по этому и прошу помощи, так как линукс для меня дремучий лес)

kluchishe
() автор топика

сам код

Какой к чорту код! Обычный sh скрипт, те просто набор команд, которые ты можешь ручками в терминале набить. Не путай себя.

Как ты обозвал кстати этот «код»?

Deleted
()
Ответ на: комментарий от slowpony

То есть не работало скорее всего из за отсутствия {} я правильно понимаю? К сожалению сейчас уже проверить возможности нет.. благодарю за помощь

kluchishe
() автор топика
Ответ на: комментарий от turtle_bazon

проблема пришла откуда не ждали, в моей версии OpenWrt нет опции atime от слова вообще..

kluchishe
() автор топика
Ответ на: комментарий от turtle_bazon
find: unrecognized: -atime
BusyBox v1.23.2 (2018-04-09 15:29:40 MSK) multi-call binary.

Usage: find [-HL] [PATH]... [OPTIONS] [ACTIONS]

Search for files and perform actions on them.
First failed action stops processing of current file.
Defaults: PATH is current directory, action is '-print'

        -L,-follow      Follow symlinks
        -H              ...on command line only
        -xdev           Don't descend directories on other filesystems
        -maxdepth N     Descend at most N levels. -maxdepth 0 applies
                        actions to command line arguments only
        -mindepth N     Don't act on first N levels
        -depth          Act on directory *after* traversing it

Actions:
        ( ACTIONS )     Group actions for -o / -a
        ! ACT           Invert ACT's success/failure
        ACT1 [-a] ACT2  If ACT1 fails, stop, else do ACT2
        ACT1 -o ACT2    If ACT1 succeeds, stop, else do ACT2
                        Note: -a has higher priority than -o
        -name PATTERN   Match file name (w/o directory name) to PATTERN
        -iname PATTERN  Case insensitive -name
        -path PATTERN   Match path to PATTERN
        -ipath PATTERN  Case insensitive -path
        -regex PATTERN  Match path to regex PATTERN
        -type X         File type is X (one of: f,d,l,b,c,...)
        -perm MASK      At least one mask bit (+MASK), all bits (-MASK),
                        or exactly MASK bits are set in file's mode
        -user NAME/ID   File is owned by given user
        -group NAME/ID  File is owned by given group
        -size N[bck]    File size is N (c:bytes,k:kbytes,b:512 bytes(def.))
                        +/-N: file size is bigger/smaller than N
        -prune          If current file is directory, don't descend into it
If none of the following actions is specified, -print is assumed
        -print          Print file name
        -print0         Print file name, NUL terminated
        -exec CMD ARG ; Run CMD with all instances of {} replaced by
                        file name. Fails if CMD exits with nonzero

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

Другое решение

Собственно так как на машине отсутствует atime, я подумал над другим решением, попробовать сравнить время создания файла с настоящим временем но более «извращенным» способом а именно преобразовать время которое у нас сейчас на машине в секунды и сравнить с временем которое указано в создании файла собственно написал немного для преобразования времени в секунду

#!bin/bash

a=$(date +%s)
c=2592000
b=$(($a - $c))

далее нужно сравнить с временем которое будет у файла, но к сожалению не нарыл в интернете информации о том как выцепить данную информацию из того же самого ls -l если кто то вдруг знает прошу помощи...

kluchishe
() автор топика
Ответ на: Другое решение от kluchishe

дата и время

Порылся в интернете и нашел как выводить конкретно только дату и время файлов вопрос теперь в том как перевести это всё в секунды

ls -l /admin/(Папка с файлами)/ | awk '{print $6,$7,8}'
kluchishe
() автор топика
Ответ на: дата и время от kluchishe

ls -l /admin/(Папка с файлами)/ | awk '{print $6,$7,8}'

Наверное всё-таки:

ls -l /admin/(Папка с файлами)/ | awk '{print $6,$7,$8}'
Deleted
()
Ответ на: комментарий от Deleted

Верно, знак доллара забыл к 8 прицепить, но на машине прописан,собственно, вопрос в том как полученные данные преобразовать в секунды

kluchishe
() автор топика
Ответ на: комментарий от Deleted

а мы не можем дату модификации которую показывает нам ls перевести в секунды и сравнить с тем что я писал выше? А именно со значением переменной в плане f<b (где f-время модификации файла) значит мы перекидываем файл в другую папку.

kluchishe
() автор топика
Ответ на: комментарий от Deleted

почитал тему, допустим я сделаю так что бы конкретно 30 дней считал именно в таком формате, но как сделать так что бы он брал сам даты эти из того же ls у каждого файла? т.к. количество файлов огромно и каждый день оно прибавляется, соответсвенно ручками это всё через чур долго и муторно делать

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

но как сделать так что бы он брал сам даты эти из того же ls у каждого файла?

find /admin/(Папка с файлами)/ -exec stat -c %x {} \;

Или в секундах:

find /admin/(Папка с файлами)/ -exec stat -c %X {} \;
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от kluchishe

что из этого вышло, новый затык...

собственно немного поразмыслив и поискав в интернете информацию дошел до того что он правильно сравнивает время модификации файлов

#!bin/bash

a=$(date +%s)
c=2592000
b=$(($a - $c))
for i in $(find script/in/ -type f -exec stat -c %X {} \;); do
if [[ "$b" -gt "$i" ]] ;then
 echo yes
 else
 echo no
fi
done

затык в том что теперь мне нужно перенести файлы которые ответили истинной и оставить в покое файлы которые ответили ложью, собственно вопрос как это сделать?

kluchishe
() автор топика
Ответ на: комментарий от dexpl

ls был приведен в пример, в целом сделал через find как писал zvezdochiot)

kluchishe
() автор топика
Ответ на: комментарий от Deleted

mtime

вот всё что он выдает мне с find

Usage: find [-HL] [PATH]... [OPTIONS] [ACTIONS]

Search for files and perform actions on them. First failed action stops processing of current file. Defaults: PATH is current directory, action is '-print'

-L,-follow Follow symlinks -H ...on command line only -xdev Don't descend directories on other filesystems -maxdepth N Descend at most N levels. -maxdepth 0 applies actions to command line arguments only -mindepth N Don't act on first N levels -depth Act on directory *after* traversing it

Actions: ( ACTIONS ) Group actions for -o / -a ! ACT Invert ACT's success/failure ACT1 [-a] ACT2 If ACT1 fails, stop, else do ACT2 ACT1 -o ACT2 If ACT1 succeeds, stop, else do ACT2 Note: -a has higher priority than -o -name PATTERN Match file name (w/o directory name) to PATTERN -iname PATTERN Case insensitive -name -path PATTERN Match path to PATTERN -ipath PATTERN Case insensitive -path -regex PATTERN Match path to regex PATTERN -type X File type is X (one of: f,d,l,b,c,...) -perm MASK At least one mask bit (+MASK), all bits (-MASK), or exactly MASK bits are set in file's mode -user NAME/ID File is owned by given user -group NAME/ID File is owned by given group -size N[bck] File size is N (c:bytes,k:kbytes,b:512 bytes(def.)) +/-N: file size is bigger/smaller than N -prune If current file is directory, don't descend into it If none of the following actions is specified, -print is assumed -print Print file name -print0 Print file name, NUL terminated -exec CMD ARG ; Run CMD with all instances of {} replaced by file name. Fails if CMD exits with nonzero

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

Ну ты б написал чем в точности ты его кормил. А то с бизибоксом контекст нужен, там все подрезано и не будут разжевывать где конкретно что не так. И угадать что вырезано в конкретной сборке я не берусь.

slapin ★★★★★
()
Ответ на: что из этого вышло, новый затык... от kluchishe

теперь мне нужно перенести файлы которые ответили истинной и оставить в покое файлы которые ответили ложью, собственно вопрос как это сделать?

На вскидку. Не проверял.

#!bin/bash

a=$(date +%s)
c=2592000
b=$(($a - $c))
find script/in/ -type f | while read i
do
 ti="$(stat -c %X $i)"
 if [[ "$b" -gt "$ti" ]]
 then
  mv -fv "$i" /you/target
 fi
 ti=""
done
Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от slapin

Беда в том что данная железка попала мне из рук и она как тестовый вариант, будет работать не будет, собственно на другой железке так же отсутствуют mtime atime ctime по этому и ищу какой то другой способ...

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

Ну без atime в исходной постановке никак. Можно попробовать изменить постановку задачи на «модифицировались». У тебя файлуха с доками без noatime смонтирована? Надо понять время доступа то там вообще есть? Раз find у тебя образанный я бы посмотрел сначала что умеет ls, awk, tar. Ты убедись еще что ты find правильно запускаешь - find <путь> [-команда [-команда...]]. Вообще, если сохраненного atime у тебя нету, переформулируй задачу.

slapin ★★★★★
()
Ответ на: комментарий от slapin

Если что, ctime - время создания, mtime - время модификации, atime - время доступа. Странно что у тебя там и баш и бизибокс одновременно. Проще уж тогда полноценные утилиты доставить сразу, раз баш влезает, недостатка в месте нет.

slapin ★★★★★
()
Ответ на: комментарий от slapin

Принцип был такой что файл создается автоматом, и в целом без разницы, данный файл нет возможности модифицировать, по этому время можно использовать хоть модификации хоть создания хоть доступа задача состояла в том что нужно переносить эти файлы, так как в целом они нужны но пусть лежат в другом месте дабы не засорять папку с актуальными данными

kluchishe
() автор топика
Ответ на: комментарий от kluchishe

работает прекрасно

Забыл предупредить. Может быть лаг при наличии пробелов в имени файлов.

Deleted
()
Ответ на: комментарий от kluchishe

Точно? УМВР:

/ # find --help 2>&1 | head -n1
BusyBox v1.23.2 (2015-09-18 20:40:10 UTC) multi-call binary.
/ # find /bin -type f -mtime +30 | head -n3
/bin/insmod
/bin/clear
/bin/lpd
Deleted
()
Последнее исправление: Deleted (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.