Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Автоматическое перемещение файлов в определенный каталог  (Прочитано 10498 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
наверное вместо /путь/к/скрипту/который/перемещает/файл $@/$#
будет mv $@/$# /destination

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
наверное вместо /путь/к/скрипту/который/перемещает/файл $@/$#
будет mv $@/$# /destination

можно, как я понял ТС хотел чтобы /destination зависел от расширения файла, а для этого надо писать скрипт.

/destination/movies для *.mov, *.avi, *.mkv
/destination/audio для *.mp3, *.mp4, *.mp5, *.mp6 ))
...
« Последнее редактирование: 17 Октября 2011, 12:15:44 от Zloy1 »

Оффлайн ulan44

  • Участник
  • *
  • Сообщений: 166
    • Просмотр профиля
Может конечно не айс но я только учусь так что сильно не пинать.
Код: (perl) [Выделить]
#!/usr/bin/perl

$media="*.mp3"; #расширение фалов

system `cat /dev/null > /mnt/copy/fing.log.all`;
system `find -iname "$media" >> /mnt/copy/fing.log.all`;

open(FILE,"<",'/mnt/copy/fing.log.all') || die "$!\n";
while(<FILE>) {
chomp;
#print ("mv $_ /mnt/copy \n");
system (`mv "$_" /mnt/copy \n`);
}

Оффлайн cssnik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
ulan44, ваш скрипт перемещает все файлы не только из папки, в которой он лежит и запускается, но также и из всех вложенных папок  :-\ а также перемещает и активный на запись файл...

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
Допустим, надо перемещать новые файлы из ~/Downloads в подпапки ~/Downloads/video, ~/Downloads/music, ~/Downloads/books, ~/Downloads/iso в зависимости от их расширения. Вот мой вариант скрипта.

1. Надо создать файл ~/bin/move_by_ext.sh
и поместить в него этот код:
(Нажмите, чтобы показать/скрыть)
2. сделать его исполняемым: $ chmod 755 ~/bin/move_by_ext.sh
3. Разрешить себе пользоваться incrontab: $ sudo echo username >> /etc/incron.allow
4. Создать в каталоге назначения подкаталоги:$ cd ~/Downloads && mkdir video music books iso
5. Создать задание для incron: $ incrontab -e
ввести в редакторе: /home/username/Downloads IN_MODIFY sudo /home/username/bin/move_by_ext.sh $@ /home/username/Downloads
первый путь (/home/username/Downloads) - каталог, в котором появляются новые файлы,
второй путь (/home/username/bin/move_by_ext.sh) - собственно скрипт,
а третий путь (/home/username/Downloads) - каталог назначения, где должны быть подкаталоги. Выйти с сохранением из редактора
6. Проверить, что задание создано: $ incrontab -l
7. Запустить incron: $ sudo service incron start

Проверял на копировании из другого каталога, и при копировании с Windows машины через WinSCP. Чтобы он работал с торрент клиентом, надо указать торрент клиенту именовать недокачанные файлы *.part или указать чтобы он недокачанные файлы  хранил в другом каталоге и перемещал в Downloads их только полностью закачанными.
« Последнее редактирование: 21 Октября 2011, 23:59:36 от Zloy1 »

Оффлайн cssnik

  • Автор темы
  • Новичок
  • *
  • Сообщений: 25
    • Просмотр профиля
Zloy1, ваш скрипт переместил все файлы в наблюдаемой папке в папку назначения, а не только указаное мной рсширение, плюс переместил активный на запись файл...  :-\

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

Пользователь решил продолжить мысль 22 Октября 2011, 04:15:50:
Короче, заработал такой вариант с incron от Zloy1
Цитировать
/полный/путь/к/папке/где/появляются/файлы IN_CLOSE_WRITE /путь/к/скрипту/который/перемещает/файл $@/$#

и скрипт от S_F_H
Цитировать
#!/bin/sh

for file in <путь к папке с файлами>/*.<нужное расширение> #например for file in Downloads/*.torrent
do
mv -f $file <путь куда перемещать>  #например mv -f $file /Downloads/Torrents
done

Пользователь решил продолжить мысль 22 Октября 2011, 04:34:12:
Только вот как сделать так, чтобы IN_CLOSE_WRITE следило только за закрытием файлов с одним определённым расширением?

Просто если сделать запись в любой файл, находящийся в наблюдаемой папке, то сразу выполняется скрипт и перемещает все файлы с указынным в нём расширением, включая тот, что ещё записывается...  :-\
« Последнее редактирование: 22 Октября 2011, 04:36:09 от cssnik »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Фильтруй внутри скрипта

Оффлайн Zloy1

  • Активист
  • *
  • Сообщений: 261
    • Просмотр профиля
1. ваш скрипт переместил все файлы в наблюдаемой папке в папку назначения, а не только указаное мной рсширение, плюс переместил активный на запись файл...  :-\

2. и вот после того как очередной файл txt закончится писаться, его нужно переместить в другую папку

3. Только вот как сделать так, чтобы IN_CLOSE_WRITE следило только за закрытием файлов с одним определённым расширением?

4. Просто если сделать запись в любой файл, находящийся в наблюдаемой папке, то сразу выполняется скрипт и перемещает все файлы с указынным в нём расширением, включая тот, что ещё записывается...  :-\

1. У меня мой скрипт перемещает только те файлы, расширения которых в нем указаны. Вероятно вы его так отредактировали, что он у вас все файлы перемещает. Другого объяснения у меня нет. Приведите свой вариант моего скрипта.

2. Разные программы создают файлы по разному. Я вижу три варианта:
2.1 Прога создает файл, скажем ~/Downloads/big1213.txt и пишет в него до опупения, а потом закрывает
2.2 Прога создает файл, скажем /tmp/big1213.txt и пишет в него до опупения, а потом закрывает, а потом переносит в ~/Downloads/big1213.txt
2.3 Прога создает файл, скажем ~/Downloads/big1213.txt.part и пишет в него до опупения, а потом закрывает, а потом переименовывает в ~/Downloads/big1213.txt

Эти способы отличаются генерируемыми событиями:
2.1 IN_CLOSE_WRITE            на файл ~/Downloads/big1213.txt
2.2 IN_MOVED_TO               на файл ~/Downloads/big1213.txt
2.3 IN_CLOSE_WRITE, IN_MODIFY на файл ~/Downloads/big1213.txt.part


Поэтому, чтобы разобраться надо знать, как именно прога создает файл. Судя по вашему описанию увас прога работает по варианту 2.1 Тогда у вас должен отработать другой скрипт, который принимает имя файла от incrontab, а не шерстит весь каталог. Я первым написал именно такой вариант, но он у меня не сработал, т.к. у меня файлы создаются по варианту 2.3. Если вы укажите что за программа создает у вас *.txt, я попробую изменить скрипт.

3. Получать от системы IN_CLOSE_WRITE толко для *.txt невозможно.

4. Тогда вам нужен скрипт, который получает имя файла и работает только с одни файлом. Это сделать можно, но нужно точно знать как создается файл.

зы
и расширение нужно только txt?

Пользователь решил продолжить мысль 22 Октября 2011, 09:19:10:
Скрипт только для txt по варианту 2.1
(Нажмите, чтобы показать/скрыть)
в инкронтаб поместить такую команду:
/наблюдаемый/каталог IN_CLOSE_WRITE /путь/к/скрипту /каталог/назначения $@/$#
в каталоге назначения должен быть подкаталог books
« Последнее редактирование: 02 Ноября 2011, 11:43:41 от Zloy1 »

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.