2009-11-21 2 views
2
#!/bin/sh 
#My script 

echo "Are you sure you want to reorganize your files?" 
echo "Type y or Y to continue. Anything else will stop the process" 
read response 

if [ "$response" = "y" ] || [ "$response" = "Y" ]; then 
    mkdir video 
    mkdir audio 
    mkdir text 
    mv -v *.txt text >> log.txt 
    mv -v *.wmv video >> log.txt 
    mv -v *.mov video >> log.txt 
    mv -v *.mpg video >> log.txt 
    mv -v *.mp3 audio >> log.txt 
    mv -v *.wma audio >> log.txt 


    echo "Yay, it worked!" 
else 
echo "Nothing happened." 
fi 

Я написал сценарий выше, чтобы организовать файлы во вложенные папки. Например, музыкальные файлы войдут в аудио папку. Теперь я хотел бы сделать еще один шаг и сделать его более глобальным. Я хотел бы разрешить скрипту принимать аргумент командной строки, который является папкой, содержащей неорганизованные файлы. Это должно позволить сценарию быть размещенным и запущенным из любой точки файловой системы и принимать любую папку неорганизованных файлов.Сценарий, принимающий команду

Пример:

organizefiles.sh MyStuff/СМИ // подпапок бы внутри "медиа"

СМИ папка содержит все медиа-файлов.

Спасибо!

+0

Возможное улучшение: мв -v * {WMV, MOV, MPG} видео >> log.txt –

ответ

1

Часть вашего сценария может использовать первый позиционный параметр, как это:

if [ -d $1 ] 
then 
    mkdir video 
    mkdir audio 
    mkdir text 
    mv -v $1/*.txt text >> log.txt 
    mv -v $1/*.wmv video >> log.txt 
    mv -v $1/*.mov video >> log.txt 
    mv -v $1/*.mpg video >> log.txt 
    mv -v $1/*.mp3 audio >> log.txt 
    mv -v $1/*.wma audio >> log.txt 
else 
    echo "The destination directory does not exist" 
    exit 1 
fi 
+0

Я получаю «каталог назначения не существует», когда я пытаюсь его использовать. –

+0

Вы положили это между линией «if $ response» и линией «echo Yay»? Вы запустили свой скрипт как 'organizfiles.sh mystuff/media'? Существует ли «мистический/медиа»?На самом деле, теперь, когда я снова смотрю на ваш вопрос, я думаю, вы хотите переместить ** из ** $ 1, поэтому я отредактировал свой ответ соответственно. –

+0

спасибо kyou, я попробую прямо сейчас. –

1

Сценарии имеет доступ к аргументам в командной строке через некоторые переменные, как это:

$1, $2, ..., $n - refers to first, second up to n arguments. 

Пример: Typing myscript.sh Foo Foo будет установлен к переменной $ 1.

+0

, в котором часть моего сценария добавить эти переменные.? –

+0

SOURCE_DIR = $ 1 # в верхней части файла, затем проверьте его. –

+0

как это:!.. #/бен/Баш источника = $ 1 MkDir фильмы мв -v $ источника/* WMV фильмы >> log.txt мв -v $ истока/* мы фильмов >> журнал .txt –

1

Аргументы Bash довольно просты, используя формат $#. Так, например, вы можете получить доступ к первым аргументом командной строки из вашего сценария с $1

В вашем сценарии, вы могли бы сделать что-то вроде этого:

if [ -z $1 ] 
then 
    dir = $1 
else 
    dir = './' 
fi 

Затем просто добавьте новую переменную $dir к пути в ваших командах mv. Я рекомендую проверить Bash By Example от IBM. Отличная серия статей, чтобы научить вас Башу.

Обратите внимание, что может быть, что петтер лучше делать то, что я предложил, но я не знаю эксперта в Bash. :-)

+0

Благодарим вас за ссылку! –

1

здесь простая система. вы можете использовать case/esac вместо if/else для аккуратности. Кроме того, переставить мв команды немного

#!/bin/bash 
dir=$1 
cd $dir 
while true 
do 
    echo "Are you sure you want to reorganize your files?" 
    printf "Type y or Y to continue. Anything else will stop the process: " 
    read response 
    case "$response" in 
     y|Y) 
      mv -v *.txt text >> log.txt 
      for vid in "*.mov" "*.wmv" "*.mpg" "*.wma" 
      do 
       mv $vid video >> log.txt 
      done 
      echo "yay" 
      break;; 
     *) echo "Invalid choice";; 
    esac 
done 
+0

Итак, «N» - это «Недопустимый выбор»? Вам либо нужен «break» в вашем случае по умолчанию, либо вам нужен случай «n | N» (и изменить формулировку вашего приглашения), если вы не собираетесь «не принимать» за ответ *. Также вы можете просто 'cd $ 1' - вам не нужна переменная $ dir. –

+0

Я не хочу прерывать, потому что я хочу снова спросить ответ пользователя. Кроме того, я не тот, кто пользуется этим меню, ОП должен модифицировать, чтобы удовлетворить его потребности, если он хочет сломать или нет, поэтому я не отвечаю, чтобы решить ТОЧНО его проблему. Я просто хочу назвать $ 1 до $ dir, в чем проблема? Мне кажется, мне нравится английский, и, возможно, я хочу снова использовать $ dir в своем коде, и я не хочу конфликтовать с другим $ 1 в моем цикле, например? – ghostdog74

Смежные вопросы