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

Обычно я использую команду 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

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

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 дополнительно не копирует файл, если он уже скопирован (если исходный файл не имеет другую временную метку или размер).

  • Shell script: перенаправить вывод sql-запроса в файл
  • Как я могу получить вывод `ls -l` для ссылки рекурсивно, пока не достигнут исходный файл?
  • Все файлы не загружаются скриптом SFTP
  • Пока команда не найдена и синтаксическая ошибка рядом с неожиданным токеном
  • изменение шаблона текстового файла
  • Сценарий оболочки не запускается при запуске
  • Самый простой способ найти / заменить в файле с помощью списка?
  • Предотвращение завершения работы с использованием сценария оболочки при завершении работы
  • Как искать ссылки на строки в указанном месте?
  • Невозможно конкатенировать пути к файлам, разрешено отклонение
  • Сжимайте большое количество больших файлов быстро
  • Удалите повторяющиеся строки с помощью twist
  • Linux и Unix - лучшая ОС в мире.