Использование параметров в скрипте

Обычно я использую команду find для автоматической копирования определенных мультимедийных файлов из каталога A в каталог B. Я использую следующую команду:

for f in `find ./ -name "*.mkv" -mtime -24h`; do cp $f rename/ ; done 

Это полностью делает то, что я хочу, но теперь, когда я передал команду в исполняемый скрипт (назовем его mmcopy , он отлично работает). Интересно, могу ли я улучшить скрипт, чтобы сделать следующее:

Когда я mmcopy в командной строке, я хотел бы проанализировать два оператора / переменных для скрипта, а именно переменную расширения файла и переменную для оператора mtime, поэтому я могу указать, какие файлы должны быть скопированы и как старые эти файлы могут быть.

Например: я хочу автоматически копировать (все) .jpg файлы в каталоге, новее чем 3 дня, mmcopy jpg -3d должна выглядеть как mmcopy jpg -3d

Как мне изменить сценарий, чтобы иметь возможность?

  • Прикрепленное изображение отсутствует в почте Unix при прикреплении нескольких файлов
  • Почему не работает: while true; do "$ my_command"; сон 1; сделанный
  • Создание туннеля openvpn в сценарии bash
  • Как извлечь неизвестные аргументы в сценарии оболочки?
  • скрипт bash, вызывающий другой скрипт, вызывает отказ в файле журнала
  • Объедините две команды в .bash_profile
  • Как я могу получить этот скрипт для выхода ошибки на основе результата цикла for?
  • Как подсчитать подпроцессы, достигшие определенного состояния
  • One Solution collect form web for “Использование параметров в скрипте”

    Во-первых, ваш текущий скрипт разбивается на имена файлов, содержащие пробелы и другие специальные символы. Это очень легко исправить: всегда используйте двойные кавычки вокруг подстановок переменных и используйте -exec вместо разбора вывода find . См. Почему мой сценарий оболочки задыхается от пробелов или других специальных символов? Чтобы получить больше информации.

     find . -name "*.mkv" -mtime -24h -exec cp {} rename/ \; 

    Аргументы, переданные вашему скрипту, доступны в специальных параметрах $1 , $2 и т. Д. Вот сценарий, который копирует файлы, расширение которых является первым параметром скрипта и чье сопоставление временной метки задается вторым параметром.

     #!/bin/sh find . -name "*.$1" -mtime "$2" -exec cp {} rename/ \; 

    Если вы хотите принять значения по умолчанию, если аргументы отсутствуют, вы можете использовать конструкцию расширения параметра ${…:-…} .

     #!/bin/sh find . -name "*.${1:-mkv}" -mtime "${2:--1d}" -exec cp {} rename/ \; 

    Я рекомендую заменить cp на cp -p или rsync -a . cp -p сохраняет метку времени в файле, что упрощает ее передачу, когда вы уже скопировали файл. rsync -a дополнительно не копирует файл, если он уже скопирован (если исходный файл не имеет другую временную метку или размер).

    Interesting Posts

    Как установить диск на ключ в Red-Hat 6 (Beta) после его извлечения

    Количество строк в соответствии с их содержанием

    Как выделить больше места для обмена и увеличения его размера больше, чем Рам?

    файл по-прежнему доступен только для чтения после монтирования – из раздела rw

    Возможно ли получить доступ к qemu-монитору, когда VM уже запущена?

    Sudo больше недоступен, и пользователи не могут устанавливать или изменять большинство файлов

    Почему chmod рекурсивно меняет права доступа к файлам?

    Сетевой перевод, один к одному, не один для многих

    Вложенные монтируемые nfs отказываются на стороне клиента

    Удаленная команда ssh не отправляет echo-переменную из сценария ksh в AIX

    Не могу пинговать машину на eth0; Пункты штрафа на wlan0; Centos 6.5 на Dell D610

    iptables, дифференцировать порты на основе имени хоста

    эквивалент правила iptables в ip6tables

    Забудьте хэшированное исполняемое местоположение в интерактивной оболочке bash

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

    Linux и Unix - лучшая ОС в мире.