Понимание этого сценария Unix - PullRequest
0 голосов
/ 21 января 2012

Этот сценарий был написан моим преподавателем, но я не понимаю его.Может кто-нибудь объяснить, пожалуйста, мне.

#!/bin/bash
find $1 -size +${2}c -size -${3}c

Этот сценарий предполагает принять три аргумента командной строки: имя каталога, минимальный размер файла в байтах и ​​максимальный размер файла в байтах.Таким образом, при запуске он будет выглядеть следующим образом:

./script.sh /home/Desktop/file 5000 10000

И тогда файлы размером от 5000 до 10000 будут отображаться на экране.

Предположим, кто-нибудь знает другой способ сделатьто же самое?

Ответы [ 2 ]

2 голосов
/ 21 января 2012
#!/bin/bash
find $1 -size +${2}c -size -${3}c
    |___|     |_____|       |_____|
      |          |             |
This is the    This is      This is the
first argument the second   third argument
passed while    argument
 running the
  script
Синтаксис утилиты

find предназначен для поиска specified path файлов, которые можно идентифицировать в зависимости от выбранного options.

-size n[ckMGTP]
 True if the file's size, rounded up, in 512-byte blocks is n.  
 If n is followed by a c, then the primary is true if the 
 file's size is n bytes (characters).  

Использование + перед second argument означает, что мы ищем файлы greater, а затем указанное число. Аналогично - означает, что отображаемые файлы должны быть меньше указанного размера.

Передавая три аргумента вашему сценарию, мы получаем $1 в качестве пути для поиска, который в вашем случае равен /home/Desktop/file. Второй аргумент определяет условие, что файлы должны быть больше указанного аргумента, который равен 5000. Последний аргумент предназначен для указания того, что файлы должны быть меньше указанного размера, равного 10000.

Надеюсь, это поможет!

0 голосов
/ 21 января 2012

Этот скрипт выполняется так, как говорит ваш учитель.

Ошибка "find: Invalid argument +c to -size. из-за того, что вы не сообщите второй аргумент скрипту. Тогда $ {2} не имеет значения и скрипт пытается выполнить:

find your_path -size +$c -size -$c

Вы можете изменить свой сценарий, чтобы проверял число или аргументы :

#!/bin/bash
EXPECTED_ARGS=3
E_BADARGS=65
HLP_ARG="path min_size max_size"
if [ $# -ne $EXPECTED_ARGS ]
then
  echo "Usage: `basename $0` $HLP_ARG"
  exit $E_BADARGS
fi    

find $1 -size +${2}c -size -${3}c
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...