Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: vikktor в Jan 19, 2009, 12:41



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

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


Титла: Re: Bash script
Публикувано от: Hapkoc в 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.  


Титла: Re: Bash script
Публикувано от: radoulov в 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.  ' - {} \;


Титла: Re: Bash script
Публикувано от: zeridon в Jan 19, 2009, 14:49
Имахме подобна задачка в конкурса Bash Майстора
може и да ти помогне: http://www.linux-bg.org/forum/index.php?topic=21865.0


Титла: Re: Bash script
Публикувано от: CappY в Mar 03, 2009, 16:36
Съфорумници,я ударете едно рамо. Трябва ми скрипт който търси рекурсивно в текущата работна директория даден файл,ако го няма да прави 2 прости действия. Хал хабер си нямам от BASH. Благодаря. :)


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


Титла: Re: Bash script
Публикувано от: CappY в 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'


Титла: Re: Bash script
Публикувано от: neter в 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


Титла: Re: Bash script
Публикувано от: CappY в Mar 04, 2009, 00:41
Всичко супер, но ми трябва да изпълнява командите когато "името_на.файла" го няма. Има ли начин да го обърна s NOT както в C++ с != ?  ??? :) Идеята ми като цяло е в дадена папка с много под-папки да се сканира дали съдържат файла song.ogg ,ако НЕ го съдържат да правят следната команда в под-папката: cp guitar.ogg song.ogg и с echo  да извежда къде е добавило song.ogg. Благодаря за отделеното внимание. :)


Титла: Re: Bash script
Публикувано от: romeo_ninov в 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 :)


Титла: Re: Bash script
Публикувано от: radoulov в 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 \;


Титла: Re: Bash script
Публикувано от: CappY в 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


Титла: Re: Bash script
Публикувано от: radoulov в Mar 04, 2009, 20:40
Мой пропуск :)
Сега е ОК.

Код
GeSHi (Bash):
  1. _dir="{}"


Титла: Re: Bash script
Публикувано от: neter в 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


Титла: Re: Bash script
Публикувано от: CappY в Mar 04, 2009, 23:38
Всичко е точно сега!  Голямо благодаря на всички отзовали се !! :))  :D