Автор Тема: триене на файлове по-стари от...  (Прочетена 2157 пъти)

anakinn

  • Напреднали
  • *****
  • Публикации: 190
    • Профил
Здравейте
Иска да направя някакво скриптче, което като се стартира да изтрива файлове, които не са ли достъпвани от някакъв период от време.
Нещо от рода на:
find /data/movies -atime +160 (не можах да разбера това дни ли са или?) и после как точно трябва да добавя "rm"-то в този ред ?

Благодаря предварително !
Активен

betso

  • Напреднали
  • *****
  • Публикации: 281
    • Профил
триене на файлове по-стари от...
« Отговор #1 -: Feb 25, 2008, 17:44 »
Това пише в man страницата на find:
Примерен код
-atime n   File  was last accessed n*24 hours ago.  When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days ago.

Би могъл да да интегрираш rm по няколко начина.
Цитат
find /data/movies -atime +160 -exec rm {} \;
или
Цитат
for i in `find /data/movies -atime +160` ; do rm "$i" ; done
Става и с xargs (find /data/movies -atime +160 | xargs...), но никога не съм го поглеждал, макар и да съм останал с впечатление, че е мощен инструмент.
Успех!
:)
Активен

anakinn

  • Напреднали
  • *****
  • Публикации: 190
    • Профил
триене на файлове по-стари от...
« Отговор #2 -: Feb 25, 2008, 17:51 »
Значи нещо от рода на:
find /data/movies -atime +60 -exec rm {} \;
би трябвало да свърши работа

тогава
find /data/movies -atime +60 -exec mv * /data/recycle {} \;

би ли било същото ?
Активен

betso

  • Напреднали
  • *****
  • Публикации: 281
    • Профил
триене на файлове по-стари от...
« Отговор #3 -: Feb 25, 2008, 18:23 »
Не разбирам, какво искаш да направиш с `mv * /data/recycle {}`. Това са 3 аргумента за `mv`, което не е позволено и не дава смисъл, ако не ползваш опции на `mv`.
Ако не си сигурен за синтаксиса на find, ще Ти е по-лесно да погледнеш man страницата. Във форума отговорите се бавят повече време. :)
Успех!
:)
Активен

anakinn

  • Напреднали
  • *****
  • Публикации: 190
    • Профил
триене на файлове по-стари от...
« Отговор #4 -: Feb 26, 2008, 12:06 »
Идеята е файловете да не се трият, а да се местят някъде за период от време и след това да бъдат изтривани от тази "кофа"

В началото имаме търсене с параметър:
find /data/movies -atime +60

след това е добавя втората команда, която искам да изпълня нали така?
-exec rm/mv....

за какво служат:
 {} \;

в крайна сметка нещо от рода на:
find /data/movies -atime +60 -exec mv * /data/recycle  {} \;
Активен

peterangelov

  • Напреднали
  • *****
  • Публикации: 41
    • Профил
триене на файлове по-стари от...
« Отговор #5 -: Feb 26, 2008, 17:06 »
{} е заместител за всеки намерен файл. (това, което смяташ, че ще стори "*" )

\; е края на exec

т.е. ти трябва реда

Примерен код

find /data/movies -atime +60 -exec mv {} /data/recycle \;


преди това е хубаво да пуснеш find и да провериш какво намира, за да не преместиш неща, които не искаш:

Примерен код

find /data/movies -atime +60 -exec ls -l {} \; > files_to_be_moved


и прегледай files_to_be_moved



Активен

anakinn

  • Напреднали
  • *****
  • Публикации: 190
    • Профил
триене на файлове по-стари от...
« Отговор #6 -: Feb 27, 2008, 09:45 »
Ясно!
Благодаря за информацията.

Само още един въпрос. По-скоро съвет...
Как мога да запазя структурата на директориите и файловете ?
Активен