Nowe posty

xx FirebirdSQL server w xinetd (1)
Wczoraj o 08:31:48
xx [SOLVED] Poczta Linux.pl (9)
2022-08-09, 15:09:29
xx Dostęp z komputerów z windowsem do plików udostępnionych na serwerze linux (samb (0)
2022-08-08, 20:27:55
xx brak uprawnienia do zamontowanej partycji ntfs - elementaryOS 6,1 (5)
2022-08-08, 06:36:07
xx Jak zainstalować sterowniki do karty sieciowej TP LINK WN350GD (1)
2022-08-04, 05:55:46
xx Ubuntu vs Fedora (1)
2022-07-26, 03:40:58
xx virtualization technology (1)
2022-07-25, 21:27:10
xx Migracja z centos 6 na centos 7 (3)
2022-07-25, 07:31:19
xx akonadi w KDE5 (10)
2022-07-22, 23:34:05
xx Alternatywa dla Delphi (7)
2022-07-22, 15:27:42

Autor Wątek: [bash] formatowanie wyjścia 'find' - pomocy  (Przeczytany 3691 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)