Chciałem, żeby zwracało wszystkie wymienione formaty plików. Ale zwracało tylko pierwszy, znaczy .jpg
Dir[src + '/*.{jpg, txt, png}'].each do |old_dest|
new_dest = old_dest.gsub(src, dst)
puts new_dest
copty_with_path(old_dest, new_dest)
end
Nagłowiłem się nad tym dobre kilkanaście minut, w końcu taka zmiana pomogła:
Dir[src + '/*.{jpg,txt,png}'].each do |old_dest|
Czyli po prostu usunięcie spacji…
Pytanie dlaczego? Jak to w końcu jest z białymi znakami w Rubim. Szperam w internecie i nie mogę dojść kiedy spacje mają znaczenie, kiedy nie i dlaczego w tym przypadku działa to tak a nie inaczej. Gdzie na ten temat można poczytać coś więcej?
W tym wypadku to nie jest ruby tylko unix. Przekazujesz tak zwane glob pattern
( http://en.wikipedia.org/wiki/Glob_(programming) ) do funkcji, a te sie rządzą określonymi zasadami, m.in. spacje maja znaczenie (bo są dozwolone w nazwach pliku. Zauważ że wzorzec plików podajesz jako łańcuch ''
W tym konkretnym wypadku "/*.{jpg, txt, png}
oznacza wszystkie pliki które kończą się na .jpg
. txt
. png
(zauważ spacje). Tak więc dostajesz o co prosisz, musisz dobrze przemyśleć co chcesz. Wypada zacytować Henry’ego Spencera ‘If you lie to the compiler, it will get its revenge.’
Przy okazji Najlepiej łączyć ścieżki z wykorzystaniem File.join np. File.join(src, '*.{jpg, txt, png}')
ponieważ różne platformy używają różnych separatorów katalogów (linux /
windows \
)