Скрипт сортировки файлов

Изображение пользователя skyline.

Иногда бывает так что "гуляя" по просторам Интернета скачиваешь разные файлы(там картинка понравилась, где-то песенку прикольную надыбал ну и т.д.) и если их сразу не рассортировать то со временем(а если Вы еще и не единственный пользователь ПК) папка "Загрузки" превращается в "СваЛкУ", и на то, что бы все это разложить "по полочкам" может уйти не мало времени и сил. Но зачем что-то делать вручную если это можно сделать автоматически!? Немого поковырявшись в справочнике по bash + Интернет, я сделал для себя вот такой скрипт для автоматической сортировки файлов:
#!/bin/bash

VIDEO=$HOME"/Видео"
PICTURE=$HOME"/Изображения"
DOCS=$HOME"/Документы"
MUSIC=$HOME"/Музыка"

# проверяем, существуют ли каталоги. Если нет - создаем их
if [ ! -e $VIDEO ]
then
  mkdir -p $VIDEO
fi

if [ ! -e $PICTURE ]
then
  mkdir -p $PICTURE
fi

if [ ! -e $DOCS ]
then
  mkdir -p $DOCS
fi

if [ ! -e $MUSIC ]
then
  mkdir -p $MUSIC
fi

# сортируем файлы
for file in *
do                     
  if [ -f "$file" ] # если файл "регулярный" (не директория и не файл-устройство)
  then
    case "$file" in
      *.avi|*.flv|*.wmv|*.vob)
        mv -v "$file" $VIDEO
        ;;
      *.jpg|*.png|*.gif|*.bmp)
        mv -v "$file" $PICTURE
        ;;
      *.txt|*.doc|*.djvu|*.odt|*.pdf)
        mv -v "$file" $DOCS
        ;;
      *.mp3)
        mv -v "$file" $MUSIC
        ;;
    esac
  fi
done

Скрипт в первую очередь создавался для себя(надеюсь что он поможет еще кому-то облегчить рутинную работу по разбиранию завалов в папке с загрузками) и на оригинальность или "открытие Америки" я не претендую =)
Возможно скрипт не идеален(я ведь только учусь =) ) и его можно как то доработать, не стесняетесь пишите в комментариях что и как можно улучшить.

Комментарии (14)

0
kot040188 - 1 Март, 2014 - 23:15
Изображение пользователя kot040188.

Я сам баш не умею, но очень нужно следующие: переместить определенный тип файла в определенную директорию, а остальные файлы в другую. Возможно ли такое В данном скрипте?

0
DarkneSS - 1 Март, 2014 - 23:19
Изображение пользователя DarkneSS.

mv *.avi /mnt/video
mv *.png /mnt/picz
?

0
kot040188 - 1 Март, 2014 - 23:26
Изображение пользователя kot040188.

Вы меня не поняли. Еще раз: мне надо допустим png переместить в /mnt/picz, а все остальные типы (не перечесляя их) в другую.

0
lord_i - 2 Март, 2014 - 00:14
Изображение пользователя lord_i.

mv /home/download/*.png /mnt/picz
mv /home/download/*.* /mnt/111

Все же, хоть немного, но читать по линуксу надо. Или учиться совсем не прикалывает?

0
kot040188 - 2 Март, 2014 - 00:24
Изображение пользователя kot040188.

Спасибо. Я так понял вторую строчку надо в самый конец пихать иначе в папку /mnt/111 полетит все и в том числе png?

+3
lord_i - 2 Март, 2014 - 00:27
Изображение пользователя lord_i.

Да.
ЗЫ Обратите внимание на эффект удовлетворения от обучения. :)
ЗЫЫ В этой системе очень и очень много интересного именно в, на первый взгляд унылой, коммандной строке. Можно делать действительно удивительные вещи.

0
kot040188 - 2 Март, 2014 - 01:17
Изображение пользователя kot040188.

Такой вопрос: допустим я запихну скрипт в планировщик заданий для автоматической сортировки, с частотой 1 раз в минуту, если скрипт будет долго выполняться и запустится второй, что тогда? Получится конфликт? И еще: что будет если замутить скрипт во время записи в директорию?

0
Fierta - 2 Март, 2014 - 01:20
Изображение пользователя Fierta.

Извини,тебе зачем в одну минуту то?Не проще ли один раз в неделю или в день. Нет,не будет ни какого конфликта.

0
kot040188 - 2 Март, 2014 - 01:23
Изображение пользователя kot040188.

В неделю это если редко туда файлы закидываешь. Я буду закидывать часто, раз в минуту и хочу чтобы они оперативно перемещались куда надо.

+1
lord_i - 2 Март, 2014 - 01:23
Изображение пользователя lord_i.

Конфликта по идее не будет. А что, за минуту во входящем директории может так много файлов появиться? Если они из инета скачиваются, то в пределах системы mv побыстрее работает. Особенно, если перемещение в пределах одного логического диска происходит. Там вообще очень быстро, десятки тысяч файлов можно переместить за минуту.

0
kot040188 - 2 Март, 2014 - 01:39
Изображение пользователя kot040188.

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

+1
lord_i - 2 Март, 2014 - 11:38
Изображение пользователя lord_i.

Не будет, если перемещение в пределах одного логического диска. За такие вещи отвечает ядро, которое управляет ext4 (я надеюсь у Вас именно такая файловая система) Если перемещение между двумя разными логическими дисками - тогда перенесется только та часть файла, которая была записанна на момент запуска скрипта. :(
Но есть и хорошие новости. Система позволяет определить - открыт ли файл на запись в данный момент и можно построить скрипт таким образом, чтоб недописанные файлы не перемещались. А вообще, если бы Вы озвучили полностью задачу, которую надо решить, было бы проще что-то советовать.

0
kot040188 - 2 Март, 2014 - 14:15
Изображение пользователя kot040188.

Ну я буду перемещать в пределах одного диска. Вопросов больше нет.

0
Гость - 23 Апрель, 2014 - 00:02

Incron ?

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры