2016-10-05 3 views
0

У меня есть некоторые автоматические загрузки в собственном дистрибутиве linux. Они переходят на временный диск с царапинами. Я хочу переместить их, когда они закончатся на главный массив RAID. Лучший способ, которым я могу это сделать, - проверить папки на диске, чтобы увидеть, изменилось ли содержимое в последнюю минуту. Если нет, то это, вероятно, закончит загрузку, а затем переместите ее.Сценарий Bash для перемещения папок на основе изменений в размерах?

Предполагая, что в этом месте могут быть сотни папок или только один, и все это будет в том же месте. Каков наилучший способ написать это?

я могу получить список размеров папок с

du -h directory/name 

Папки могут содержать несколько файлов в любом месте от 1.5MB до 10GB

Temp Loc: /volume2/4TBScratch/Processing 
Dest Loc when complete: /volume1/S/00 Landing 

EDIT: Используя это:

find /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec mv "{}" "/volume1/S/00 Landing" \; 
find: `/volume2/4TBScratch/Processing/test': No such file or directory 
4.3# 

все же оно копирует релевант t и все файлы. Но ошибка беспокоит меня, что в будущем что-то может пойти не так ... это потому, что есть несколько файлов, и у нее есть одна и та же команда перемещения для КАЖДОГО файла или папки в корневой папке? Но поскольку он перемещает все это на первой итерации, он не может найти ее на следующих?

EDIT2: Использование Rsync

4.3# find /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec rsync --remove-source-files "{}" "/volume1/S/00 Landing" \; 
skipping directory newtest 
skipping directory erw 

ПОСТАНОВИЛИ: EDIT3 Решено с помощью в комментариях ниже. Окончательный сценарий выглядит следующим образом:

find /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec rsync -a --remove-source-files "{}" "/volume1/S/00 Landing" \; 
find /volume2/4TBScratch/Processing -depth -type d -empty -delete 

Rsync для перемещения папок и файлов, но оставляет пустую корневую директорию следующая команда находит пустые папки и удаляет их.

Спасибо всем!

+0

Каков размер папок, которые вы хотите переместить? и какой каталог вы хотите переместить? – Inian

+0

обновил вопрос. –

+0

Таким образом, будет безопасно перемещать все папки размером менее 10 ГБ во временном местоположении до фактического места назначения. – Inian

ответ

1

Вы можете использовать GNUfind с опциями -size для обнаружения файлов/папок определенного размера и использовать mv с опцией -exec, чтобы перейти в каталог назначения. Синтаксис

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -size -10G -exec mv "{}" "/volume1/S/00 Landing" \; 

Использование rsync

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -size -10G -exec rsync --remove-source-files "{}" "/volume1/S/00 Landing" \; 

размера с - знака для обозначения меньше указанного размера, который в данном случае является 10GB. Примечание по каждому используемому флагу

  • -type d -> Для идентификации только папок с исходного пути.
  • -maxdepth 1 -> Смотри только на текущий каталог источника, а не , являющийся рекурсивным.
  • -exec -> Выполнение команды, следующей за ней.

В качестве альтернативы, если вы хотите найти файлы, которые последнее изменение в течение определенного времени (в минутах), find имеет возможность для -mmin который может быть установлен на значение. Например. -mmin -5 вернет файлы, измененные пять минут назад.

Так предложить добавить его к вашему требованию, для x, как вам нужно, и посмотреть, если каталоги в списке, то вы можете добавить опцию -exec для перемещения каталогов

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -mmin -2 -size -10G 

Обратитесь к документации GNU для finding files according to size о том, как это работает.

Примечание: - Двойные кавычки ("") добавляются, чтобы избежать разделения Bash на имена, содержащие пробелы.

+0

Но проблема в том, что файл (ы) в папке x все еще загружается, он будет перемещен до его завершения. Мне нужно убедиться, что размер файлов не изменился для всех файлов в папке или подпапках за последние х секунд, прежде чем перемещать папку –

+0

@CarverStone: см. Мое обновление – Inian

+0

На правильном пути. См. Обновленный вопрос –

 Смежные вопросы

  • Нет связанных вопросов^_^