Покажи Публикации - radoulov
* Виж публикациите на потр. | Виж темите на потр. | Виж прикачените файлове на потр
Страници: 1 ... 6 7 [8]
106  Програмиране / Общ форум / Shell скрипт за актуализация на папка -: Feb 10, 2007, 12:28
Цитат
radoulov, извинявай, че пак ще ти противореча, но... ти изпробваш ли скриптовете, преди да ги дадеш тук?
Относно скрипта
cd dir1
set -- ../dir2/*
cp -u "${@##*/}" ../dir2
той запомня само последната променлива и по този начин копира само последния файл, тъй като нямаш цикъл. Да не говорим, че е противопоказно в скриптове да се използват относителни пътища.



Изключително интересно мнение ...  
Така, имаме две папки:

dir1 -> file1, file2, file3
dir2 -> file1, file3

Искаме да актуализираме само file1 и file3, копирайки новите версии от dir1 в dir2,
Скриптът ще бъде с "echo", за да се вижда, какво точно се копира:

Примерен код

$ cd dir1
$ set -- ../dir2/*
$ echo "cp -u "${@##*/}" ../dir2"
cp -u file1 file3 ../dir2
 

На теб какво ти дава, че се копира само file3 (казваш само последния ...)?
Относно относителните пътища: не бих искал сега да се отклонявам от темата,
но ако предпочиташ, можеш да замениш dir1 и dir2 с absolute path, променлива и т.н,
с този скрипт само илюстрирам похват.  

Цитат

За скрипта
$ for i in dir2/*;do
> echo "cp -u dir1/"${i##*/}" dir2" # echoing for demonstration
> done
cp -u dir1/file1 dir2
Първо, копирането е извън цикъла, друг въпрос и че първо използваш променлива i, после незададена променлива file1 (считаме, че е променлива, макар че не си сложил $ пред нея)... демек пак не става така. Второ, нали ти казах, че така зададена променливата i приема стойност пълния път до файла и така, като изпълниш командата cp -u $dir1/$i $dir2, скрипта ще търси файл за копиране в папка $dir1/$dir2, която не съществува. От начина, по който даваш примери, заключавам че или си някой велик гуру, който не схваща че не му четем мислите (защото аз не мога да разбера как се изпълняват скриптовете ти) или си пишеш из форума ей така за спорта, което вреди на правилната информация. Когато даваш за пример някакъв скрипт (особено такъв елементарен като този), нищо не ти пречи първо да го пробваш, за да видиш дали нещата сработват и след това да го даваш тук  


Прочетох това 3 пъти, докато разбера какво имаш предвид
(и все още не съм абсолютно сигурен, дали съм разбрал).
Разковничето, може би, е в тези думи: "... после незададена променлива file1 ...".
Очевидно, не си разбрал (сложих даже коментар), че там, където виждаш file1,
е изходът (the output) от цикъла, т.е. това, което ще се извърши, като премахнеш командата echo.
Ако все още не е ясно, това което съм написал,
сам съгласен с теб, че определено съм сбъркал форума '<img'>


P.S. Извинявам се за многократното редактиране, но ми е изключително трудно да пиша на кирилица.



107  Програмиране / Общ форум / Shell скрипт за актуализация на папка -: Feb 09, 2007, 19:25
Всъщност аз бих го написал така:

Примерен код

cd dir1
set -- ../dir2/*
cp -u "${@##*/}" ../dir2
108  Програмиране / Общ форум / Shell скрипт за актуализация на папка -: Feb 09, 2007, 18:52
Цитат

radoulov, забележката ти не е насочена точно към моя пост, но обхваща и него, затова ще попитам как аджеба ше стане според теб така? Ще дам пример със скрипта на Harkoc, защото е подобен и защото ти си използвал него. Когато зададеш
for file in /path/to/folder2/*;do ...
променливата file приема стойност /path/to/folder2/file и не виждам как да му кажеш да копира от Папка1 само файловете, които ги има в Папка2.
В нашите скриптове променливата file (при мен i) приема стойност последователно всеки файл в Папка2, но стойността и е само името на файла, не и пътя до него и така можеш да правиш каквото си поискаш с променливата. Всъщност виждам как ще стане твоето. С cut да режеш части от променливата и да наслагваш... нужно ли е за едно такова елементарно действие?


Без външни команди (ls) и subshells($()):

Примерен код

$ mkdir dir1 dir2

$ touch dir1/file1 dir1/file2 dir2/file1

$ for i in dir2/*;do
> echo "cp -u dir1/"${i##*/}" dir2" # echoing for demonstration
> done
cp -u dir1/file1 dir2




109  Програмиране / Общ форум / Shell скрипт за актуализация на папка -: Feb 09, 2007, 17:57
Цитат (Hapkoc @ Фев. 09 2007,17:30)
[...]
for file in $(ls -1 --color=no $path_to_papka2); do
[...]


Не само, че няма нужда от ls, ами ако има имена на файлове с embedded new lines или други "патологични" characters, скриптът няма да работи.


Примерен код

for file in /your/path/*;do ...




110  Хумор, сатира и забава / Кошче / Unix задача -: Jan 13, 2007, 12:07
Цитат (winman @ Ян. 13 2007,05:14)
Браво!

Това момче ще стане човек. Без да прочете и буква си написа заданието. А помагачите, без да ми се сърдите, ще си останете електорални единици! Много елементарно ви изманипулира.

Кой знае,
така може да му хареса и да се пристрасти към shell scripting-а '<img'>
111  Хумор, сатира и забава / Кошче / Unix задача -: Jan 13, 2007, 01:25
} 6. Напишете скрипт,
} реализиращ избор по меню на следните операции:
[...]

PS3="Choose: "
select i in \
"Find files, modified in last 24 hours"  \
"Find the free disk space"  \
"Find space consumed by this user" \
"Quit"
do
  case $i in
"Find files, modified in last 24 hours") \
find . -type f -mtime -1 ;;
"Find the free disk space") \
df . | awk 'NR>1 {printf "%.2f GB\n",$4/1024/1024}' ;; # Adjust the format for your system.
"Find space consumed by this user") \
printf "%.2fKB for $USER\n" $(du -ks "$HOME"|cut -f1) ;;
"Quit") exit 0 ;;
*) echo "Invalid option!" && exit 1 ;;
  esac
done

Поздрави
Димитър
112  Програмиране / Общ форум / сравняване на променливи -: Jan 16, 2007, 14:26
Цитат (gotha @ Ян. 16 2007,14:46)
Имаш някои C забежки. Примерно :
let i=$((i - 1))
трябва да е :
let i="$i+1"
Не знам доколко моя вариант е правилен, но твоя със сигурност не работи. '<img'>

Можеш ли да дадеш пример къде/кое точно не работи?
Ако говорим за bash:

$ echo $0 && echo $BASH_VERSION
-bash
3.00.15(1)-release
$ i=1
$ let i=$((i + 1))
$ echo $i
2
$ i=1
$ let i="$i+1"
$ echo $i
2

Като всъщност в bash е достатъчно:

$ i=1
$ i=$((i+1))
$ echo $i
2

или за по-новите версии на bash:

$ i=1
$ i=$((++i))
$ echo $i
2



113  Програмиране / Общ форум / Помогнете ми с направата на един прост скрипт -: Jan 15, 2007, 20:52
OK за цитирането.

В предния ми пример fd 1 и 2 са затворени, така че е нормално да не разбира какво точно става.

@SHTILL,
можеш да публикуваш изxода от следните команди:

set -xv
sudo mount /dev/hdb /mnt/cdrom \
&&  kdialog --msgbox "Uspeshno" \
|| else kdialog --error "Neuspeshno"
set +xv



114  Програмиране / Общ форум / Баш скрипт и sort -: Jan 13, 2007, 12:16
Цитат (alabal @ Ян. 09 2007,21:50)
Братко, cichomitiko!
Прочети тази тема и пиши на кирилица. Редактирай горното съобщение на кирилица - не го изтрих, само защото приех, че вероятно има полезна информация за някого.

Извинявам се.
Не мога да редактирам горното съобщение, защото нямам вече такава опция (логнат като cichomitiko),
затова направих нова регистрация.
115  Програмиране / Общ форум / Unix задача -: Jan 13, 2007, 12:07
Цитат (winman @ Ян. 13 2007,05:14)
Браво!

Това момче ще стане човек. Без да прочете и буква си написа заданието. А помагачите, без да ми се сърдите, ще си останете електорални единици! Много елементарно ви изманипулира.

Кой знае,
така може да му хареса и да се пристрасти към shell scripting-а '<img'>
116  Програмиране / Общ форум / Помогнете ми с направата на един прост скрипт -: Jan 13, 2007, 12:01
}} sudo mount /dev/hdb /mnt/cdrom 2>&- 1>&- \
}} &&  kdialog --msgbox "Uspeshno" \
}} || else kdialog --error "Neuspeshno"
[...]

} Пак не става '<img'>


Би ли публикувал (copy/paste) точната команда и грешка?



117  Програмиране / Общ форум / Unix задача -: Jan 13, 2007, 01:25
} 6. Напишете скрипт,
} реализиращ избор по меню на следните операции:
[...]

PS3="Choose: "
select i in \
"Find files, modified in last 24 hours"  \
"Find the free disk space"  \
"Find space consumed by this user" \
"Quit"
do
  case $i in
"Find files, modified in last 24 hours") \
find . -type f -mtime -1 ;;
"Find the free disk space") \
df . | awk 'NR>1 {printf "%.2f GB\n",$4/1024/1024}' ;; # Adjust the format for your system.
"Find space consumed by this user") \
printf "%.2fKB for $USER\n" $(du -ks "$HOME"|cut -f1) ;;
"Quit") exit 0 ;;
*) echo "Invalid option!" && exit 1 ;;
  esac
done

Поздрави
Димитър
118  Програмиране / Общ форум / Помогнете ми с направата на един прост скрипт -: Jan 13, 2007, 00:29
} Пробвах с
}
} sudo mount /dev/hdb /mnt/cdrom
} if [ /dev/hdb = mount ]
} then kdialog --msgbox "Uspeshno"
} else kdialog --error "Neuspeshno"
} fi


sudo mount /dev/hdb /mnt/cdrom 2>&- 1>&- \
&&  kdialog --msgbox "Uspeshno" \
|| else kdialog --error "Neuspeshno"


Поздрави
Димитър



Страници: 1 ... 6 7 [8]