Перемещение файлов в каталоги на основе расширения
Я новичок в Linux. Я пытаюсь написать сценарий оболочки, который будет переместить файлы в определенные папки на основе их расширения, например в папке "Мои загрузки", у меня есть все файлы, смешанных типов файлов. Я написал следующий скрипт
mv *.mp3 ../Music
mv *.ogg ../Music
mv *.wav ../Music
mv *.mp4 ../Videos
mv *.flv ../Videos
как я могу заставить его запускаться автоматически при добавлении файла в эту папку? Теперь я должен вручную запускать сценарий каждый раз.
еще один вопрос, есть ли способ объединить эти 2 заявления
mv *.mp3 ../../Music
mv *.ogg ../../Music
в одном заявлении? Я пробовал использовать ||
(оператор программирования C 'или') и запятая, но они, похоже, не работают.
4 ответов
нет триггера для добавления файла в каталог. Если файл загружен через веб-страницу, вы можете сделать это на веб-странице.
для этого вы можете поместить скрипт в crontab на машинах unix (или Task schedular в windows). Google crontab для руководства.
что касается объединения команд, используйте следующее:
mv *.mp3 *.ogg ../../Music
вы можете включить столько разных "глобусов" (имена файлов с подстановочными знаками), сколько хотите. Последнее, что должно быть целевой каталог.
два варианта:
find . -name '*mp3' -or -name '*ogg' -print | xargs -J% mv % ../../Music
find . -name '*mp3' -or -name '*ogg' -exec mv {} ../Music \;
первый использует канал и может исчерпать пространство аргументов; в то время как второй может использовать слишком много вилок и быть медленнее. Но, оба будут работать.
incron будет наблюдать за файловой системой и выполнять команды запуска при определенных событиях.
можно объединить несколько команд в одну строку с помощью разделителя команд. Безусловный сериализованный разделитель команд -;
.
command1 ; command2
другой способ:
mv -v {*.mp3,*.ogg,*.wav} ../Music
mv -v {*.mp4,*.flv} ../Videos
PS: опция-v показывает, что происходит (подробно).