Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: [bash] formatowanie wyjścia 'find' - pomocy  (Przeczytany 3809 razy)

^robert^

  • Gość
[bash] formatowanie wyjścia 'find' - pomocy
« dnia: 2008-05-11, 20:44:18 »
Witam!

Ostatnio napisałem sobie prosty skrypt który niestety nie zawsze sobie radzi z danymi wejściowymi. Problem pojawia się wtedy gdy nazwa folderu z plikiem składa się z kilku wyrazów oddzielonych spacjami. Proszę pomóżcie mi go tak przerobić aby działał zawsze.

oto kod:

for file in $(find -name "*.tiff")
do
  cp -v $file /media/Elements/tiff/
done

jk33

  • Gość
[bash] formatowanie wyjścia 'find' - pomocy
« Odpowiedź #1 dnia: 2008-05-11, 21:13:02 »
Zainteresuj się zmienną IFS w bashu:
to ona odpowiada, za to które znaki oddzielają kolejne elementy dla pętli, a które nie.

Poza tym:
masz świadomość, że ten skrypt można zapisac prościej?
for file in *.tiff
do
  cp -v $file /media/Elements/tiff/
done
wtedy nie potrzebujesz zmiennej IFS i nie wywołujesz zewnętrznego polecenia -- find.

arctgx

  • Gość
[bash] formatowanie wyjścia 'find' - pomocy
« Odpowiedź #2 dnia: 2008-05-11, 22:34:30 »
Popróbowałbym też z objęciem wartości $file cudzysłowem. Nigdy nie zaszkodzi niezależnie od ustawień IFS. Cudzysłów (nie apostrof) maskuje specjalne znaczenie spacji jako separatora pól.

  ff $ touch "a b"
  ff $ ls -1
a b
  ff $ for i in *; do cp $i /tmp; done
cp: nie można wykonać stat na `a': Nie ma takiego pliku ani katalogu
cp: nie można wykonać stat na `b': Nie ma takiego pliku ani katalogu
  ff $ for i in *; do cp "$i" /tmp; done
`a b' -> `/tmp/a b'
  ff $ echo \\"$IFS\\"
" "
Ponieważ IFS jest złożona z białych znaków wyświetliłem ją w cytowanych cudzysłowach, żeby wiadomo było gdzie zaczyna się i kończy. U mnie więc była to spacja.

maciasz

  • Gość
[bash] formatowanie wyjścia 'find' - pomocy
« Odpowiedź #3 dnia: 2008-05-12, 11:23:32 »
Łatwiej będzie
find /kat1 -name \\*.tiff -exec cp -v {} /kat2 \\;
Pozdrawiam


---- Ten wątek został podzielony ----
Wszystkie oddzielone posty znajdują się tutaj.
(Podziału dokonał użytkownik arctgx)