Переписать скрипт, чтобы он использовал аргументы опций для управления его поведением - PullRequest
1 голос
/ 17 декабря 2011

Я создал скрипт, и он перемещает файлы с разными расширениями в указанные каталоги.Если этот каталог отсутствует, он создает другой каталог (куда будут отправляться файлы) и создает другой каталог, в который будут добавляться остальные файлы с различными расширениями.

Моя первая проблема заключается в том, что я хочу, чтобы при установке-d и полный путь на терминале, он должен перемещать только медиа-файлы, -l и полный путь для перемещения всех текстовых файлов, затем -x, чтобы изменить расширение в верхний регистр, затем -u в нижний регистр.

Может ли кто-нибудь изменить это для меня и показать, как преодолеть эту проблему?

#!/bin/bash
From="/home/elg19/lone/doc"
To="/home/elg19/mu"
WA="/home/elg19/du"
MA="/home/elg19/dq"
WQ="/home/elg19/d2"


# this function checks if the directory exits and creates one if it does not then moves all doc files 

function mama(){
if [[ ! -d "$WA" ]]; then
      mkdir -p "$WA"
fi
cd "$From"
for i in pdf txt doc; do
  find . -type f -name "*.${i}" -exec mv "{}" "$WA" \;
done
}

# this function checks if the directory exits and creates one if it does not then moves all media files 

function so(){
if [[ ! -d "$To" ]]; then
      mkdir -p "$To"
fi
cd "$From"
for i in mp3 mp4 swf; do
  find . -type f -name "*.${i}" -exec mv "{}" "$To" \;
done
}

# this function checks if the directory exits and creates one if it does not then moves all image files 

function soa(){
if [[ ! -d "$MA" ]]; then
      mkdir -p "$MA"
fi
cd "$From"
for i in jpg gif png; do
  find . -type f -name "*.${i}" -exec mv "{}" "$MA" \;
done
}

# this function checks if the directory exits and creates one if it does not then moves all the remaining files 

function soaq(){
if [[ ! -d "$WQ" ]]; then
      mkdir -p "$WQ"
fi
cd "$From"
for i in *; do
  find . -type f -name "*.${i}" -exec mv "{}" "$WQ" \;
done
}
mama
so
soa
soaq

1 Ответ

2 голосов
/ 17 декабря 2011

Я не знаю, являются ли предложенные варианты мнемоническими на вашем родном языке, но они противоречивы на английском.Я хотел бы предложить что-то более похожее на:

-m path    Move media files
-t path    Move text files
-u         Change extensions to upper-case
-l         Change extensions to lower-case

Команда для регулярного разбора аргумента, подобная этой: getopts (во множественном числе - многие системы также имеют команду getopt, единственное число, что в целом имеет разные характеристики).

Ссылочная страница дает пример того, как ее использовать:

Следующий пример скрипта анализирует и отображает свои аргументы:

aflag=
bflag=
while getopts ab: name
do
    case $name in
    a)    aflag=1;;
    b)    bflag=1
          bval="$OPTARG";;
    ?)   printf "Usage: %s: [-a] [-b value] args\n" $0
          exit 2;;
    esac
done
if [ ! -z "$aflag" ]; then
    printf "Option -a specified\n"
fi
if [ ! -z "$bflag" ]; then
    printf 'Option -b "%s" specified\n' "$bval"
fi
shift $(($OPTIND - 1))
printf "Remaining arguments are: %s\n" "$*"

Опция -a не принимает аргумент;опция -b требует аргумента.

...