Автор Тема: Bash script  (Прочетена 5329 пъти)

vikktor

  • Напреднали
  • *****
  • Публикации: 76
    • Профил
Bash script
« -: Jan 19, 2009, 12:41 »
Здравейте! Ще се радвам много ако някой оми помогне.Та целта ми е да се направи скрипт който прочита името на дадена mp3-ка(от вида Изпълнител - Песен) до интервал.Тоест след изпълнителя има интервал и тире.Така че да се чете само името на изпълнителя и да се създава папка с това име и всички песни с този изпълнител да се преместят там.Накратко искам да сортирам музика.Благодаря предварително.

П.П.Единственото нещо което успях е да подредя музиката по азбучен ред.В отделни папки.
Активен

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Re: Bash script
« Отговор #1 -: Jan 19, 2009, 13:21 »
Малко май не е за тая секция въпроса, ама карай...

Код
GeSHi (Bash):
  1. #! /bin/bash
  2.  
  3. find . -type f -name '*.mp3' | while read mp3; do
  4.  
  5. artist=$(echo $mp3 | cut -d- -f1 | sed -e 's/ $//')
  6. if [ ! -d "$artist" ]; then
  7. mkdir "$artist"
  8. fi
  9. mv "$mp3" "$artist"
  10.  
  11. done
  12.  
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Bash script
« Отговор #2 -: Jan 19, 2009, 14:31 »
Още един:

Код
GeSHi (Bash):
  1. #! /bin/bash
  2.  
  3. export dest="$HOME/mp3s" # adjust to taste
  4.  
  5. [ -d "$dest" ] || mkdir "$dest" # see above
  6.  
  7. find -name '*.mp3' -type f -exec bash -c '
  8.  f="$1" a="${f##*/}" d="$dest/${a% -*}"
  9.  [ -d "$d" ] || mkdir "$d" && mv -v "$f" "$d"
  10.  ' - {} \;
« Последна редакция: Jan 19, 2009, 14:34 от radoulov »
Активен

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Re: Bash script
« Отговор #3 -: Jan 19, 2009, 14:49 »
Имахме подобна задачка в конкурса Bash Майстора
може и да ти помогне: http://www.linux-bg.org/forum/index.php?topic=21865.0
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: Bash script
« Отговор #4 -: Mar 03, 2009, 16:36 »
Съфорумници,я ударете едно рамо. Трябва ми скрипт който търси рекурсивно в текущата работна директория даден файл,ако го няма да прави 2 прости действия. Хал хабер си нямам от BASH. Благодаря. :)
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Bash script
« Отговор #5 -: Mar 03, 2009, 20:20 »
Съфорумници,я ударете едно рамо. Трябва ми скрипт който търси рекурсивно в текущата работна директория даден файл,ако го няма да прави 2 прости действия. Хал хабер си нямам от BASH. Благодаря. :)
if `find . -name filename -type f`  then command1;command2;fi
Активен

0x2B|~0x2B

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: Bash script
« Отговор #6 -: Mar 03, 2009, 22:51 »
Съфорумници,я ударете едно рамо. Трябва ми скрипт който търси рекурсивно в текущата работна директория даден файл,ако го няма да прави 2 прости действия. Хал хабер си нямам от BASH. Благодаря. :)
if `find . -name filename -type f`  then command1;command2;fi
Благодаря за поста ,но нещо не стана :(.
Код:
cappy@cappy-gentoo /media/LocalDisk/Source/games/FretsOnFire/Songs $ ./scripts.sh
Scanning...
./scripts.sh: line 4: syntax error near unexpected token `fi'
./scripts.sh: line 4: `if `find . -name song.ogg -type f`  then echo a;echo b;fi'
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Bash script
« Отговор #7 -: Mar 03, 2009, 23:50 »
Леко да преправя и да поукрася реда на romeo_ninov
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. if [ `find . -name "име_на_файла" -type f 2>/dev/null` ] ; then
  4.    команда1
  5.    команда2
  6. fi
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: Bash script
« Отговор #8 -: Mar 04, 2009, 00:41 »
Всичко супер, но ми трябва да изпълнява командите когато "името_на.файла" го няма. Има ли начин да го обърна s NOT както в C++ с != ?  ??? :) Идеята ми като цяло е в дадена папка с много под-папки да се сканира дали съдържат файла song.ogg ,ако НЕ го съдържат да правят следната команда в под-папката: cp guitar.ogg song.ogg и с echo  да извежда къде е добавило song.ogg. Благодаря за отделеното внимание. :)
« Последна редакция: Mar 04, 2009, 00:43 от CappY »
Активен

romeo_ninov

  • Напреднали
  • *****
  • Публикации: 2155
    • Профил
Re: Bash script
« Отговор #9 -: Mar 04, 2009, 07:20 »
Всичко супер, но ми трябва да изпълнява командите когато "името_на.файла" го няма. Има ли начин да го обърна s NOT както в C++ с != ?  ??? :) Идеята ми като цяло е в дадена папка с много под-папки да се сканира дали съдържат файла song.ogg ,ако НЕ го съдържат да правят следната команда в под-папката: cp guitar.ogg song.ogg и с echo  да извежда къде е добавило song.ogg. Благодаря за отделеното внимание. :)
      #!/bin/bash
      if [ ! `find . -name "име_на_файла" -type f 2>/dev/null` ] ; then
         команда1
         команда2
      fi
Да внеса дребно изменение в скрипта на neter :)
Активен

0x2B|~0x2B

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Bash script
« Отговор #10 -: Mar 04, 2009, 12:15 »
Код
GeSHi (Bash):
  1. #! /bin/sh
  2.  
  3. source_filename='guitar.ogg' target_filename='song.ogg' source_dir='<your_source_dir>'
  4. export source_filename target_filename
  5.  
  6.  
  7. find "${source_dir:=.}" -type d -exec sh -c '
  8.  _dir="{}"
  9.  [ -f "$_dir/$target_filename" ] || {
  10.    printf "copying %s in %s ... " "$target_filename" "$_dir"
  11.    [ -r "$_dir/$source_filename" ] || {
  12.      printf "%s missing or not accessible, skipping ...\n" "$_dir/$source_filename"
  13.      exit 1
  14.      }
  15.    cp "$_dir/$source_filename" "$_dir/$target_filename" || {
  16.      printf "error copying %s to %s in %s\n" "$source_filename" "$target_filename" "$_dir"
  17.      exit 1
  18.      }
  19.    printf "done\n"
  20. }'  inline \;
« Последна редакция: Mar 04, 2009, 20:41 от radoulov »
Активен

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: Bash script
« Отговор #11 -: Mar 04, 2009, 18:10 »
Код
GeSHi (Bash):
  1. #! /bin/sh
  2.  
  3. source_filename='guitar.ogg' target_filename='song.ogg' source_dir='<your_source_dir>'
  4. export source_filename target_filename
  5.  
  6.  
  7. find "${source_dir:=.}" -type d -exec sh -c '
  8.  _dir={}
  9.  [ -f "$_dir/$target_filename" ] || {
  10.    printf "copying %s in %s ... " "$target_filename" "$_dir"
  11.    [ -r "$_dir/$source_filename" ] || {
  12.      printf "%s missing or not accessible, skipping ...\n" "$_dir/$source_filename"
  13.      exit 1
  14.      }
  15.    cp "$_dir/$source_filename" "$_dir/$target_filename" || {
  16.      printf "error copying %s to %s in %s\n" "$source_filename" "$target_filename" "$_dir"
  17.      exit 1
  18.      }
  19.    printf "done\n"
  20. }'  inline \;
Супер ,това работи но пак има 1 проблем :/ ако в директорията има разделител  място, приема часта след разделителя като команда, а не като папка,което пак обезсмисля автоматизацията :/
П.П. Намерих скрипт за прави това във Windows.
Код:
echo off
@echo COPY
for /r %%a in (.) do (
@echo %%~na
cd "%%a"
if not exist song.ogg copy guitar.ogg song.ogg
)
cd..
@echo END COPY
« Последна редакция: Mar 04, 2009, 18:12 от CappY »
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Bash script
« Отговор #12 -: Mar 04, 2009, 20:40 »
Мой пропуск :)
Сега е ОК.

Код
GeSHi (Bash):
  1. _dir="{}"
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Re: Bash script
« Отговор #13 -: Mar 04, 2009, 21:02 »
А! Да. Интервалите :) Ето го преправен и другия скрипт за тях
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. if [ ! "`find . -name 'име_на_файла' -type f 2>/dev/null`" ] ; then
  4.    команда1
  5.    команда2
  6. fi
« Последна редакция: Mar 04, 2009, 21:14 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

CappY

  • Напреднали
  • *****
  • Публикации: 72
  • Distribution: Gentoo Linux
  • Window Manager: KDE 4.5.x
    • Профил
    • WWW
Re: Bash script
« Отговор #14 -: Mar 04, 2009, 23:38 »
Всичко е точно сега!  Голямо благодаря на всички отзовали се !! :):D
Активен


Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
bash script
Хардуерни и софтуерни проблеми
flame 6 4019 Последна публикация Sep 02, 2004, 12:28
от mimosh
bash script
Общ форум
anger 4 3583 Последна публикация Mar 06, 2005, 20:01
от anger
Помощ за bash script
Хардуерни и софтуерни проблеми
Ivan_storm 4 3521 Последна публикация May 30, 2005, 12:31
от rpetrov
bash script за праверяване на процес
Общ форум
sys7em 8 4067 Последна публикация Aug 09, 2005, 15:39
от
Bash script и извеждането му
Web development
martien 3 3285 Последна публикация Nov 02, 2006, 11:55
от morbid_viper