Fany Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 Witam! Od jakiegoś czasu próbuję wgryźć się w ułatwienie sobie życia przez pisanie skryptów w BASH-u. W związku z tym chciałem spróbować napisać jakiś prosty skrypt do wyszukiwania plików, które w nazwie zawierają np. "xyz" a następnie chciałbym przenieść te pliki do folderu o nazwie "XYZ". To takie sortowanie wg. nazwy. Produkuję wiele plików tekstowych. Nadaję im określoną nazwę. Wszystko ląduje domyślnie w katalogu. Wiem że może w tym pomóc polecenie find ale na razie nie wiem jak to ugryźć. Czy ktoś mógłby mi coś w tym temacie pomóc? Z góry dziekuję! Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 * czysty find find /katalog/szukania -type f -name \*xyz\* -exec echo '{}' \; * bash 4 #!/bin/bash # Must enable globstar, otherwise ** doesn't work. shopt -s globstar # rekursywnie d=/home/lucas/temp e=xyz for s in "$d"/**/*${e}* do echo "$s" done trochę z pamięci lecę, więc mogą być błędy Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 10, 2010 Autor Zgłoszenie Share Napisano Marzec 10, 2010 No bardzo dziękuję za szybką odpowiedź! Trzymając się pierwszej wersji czyli polecenia z użyciem find mam pytanie: co zrobić żeby wyszykane pliki zostały skopiowane do katalogu o nazwie "xyz"? Wiem że jest taka opcja jak cpio, ale jak na razie trochę dla mnie zawiła... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 A google masz Dla mnie wszystko jest zawiłe jak używam pierwszy raz. Ćwicz, to się nauczysz. Wróć jak się na czymś zatniesz. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 10, 2010 Autor Zgłoszenie Share Napisano Marzec 10, 2010 A google masz ale mam też forum, prawda? Dlaczego to nie działa: find /media/archiwum/Dokumenty/ -name '*XYZ' -exec cp {} /media/archiwum/Dokumenty/XYZ/ \; Katalog XYZ jest utworzony, a pliki się nie kopiują.... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 W Linuksie wielkość liter ma znaczenie i to tyle w kwestii podpowiedzi Secundo, nawet dobrze nie "przepisałeś" tego co podał Ci borzole Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 10, 2010 Autor Zgłoszenie Share Napisano Marzec 10, 2010 W Linuksie wielkość liter ma znaczenie i to tyle w kwestii podpowiedzi Secundo, nawet dobrze nie "przepisałeś" tego co podał Ci borzole Nie wiem na ile ze zrozumieniem przeczytałeś moj pierwszy post opisujący problem. To co napisał borzole owszem wynajduje pliki i wypisuje je w terminalu ale nie kopiuje ich do innego katalogu tak jak bym tego oczekiwał, tzn. w ogole ich nigdzie nie kopiuje. Polecenie, które napisałem znalazłem na innym forum i tam gościowi działa a mnie nie i w tym problem... A o co Ci chodzi z tą wielkościa liter w tym przypadku to nie bardzo rozumiem... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 ciach... które w nazwie zawierają np. "xyz" a następnie chciałbym przenieść te pliki do folderu o nazwie "XYZ". ciach... find /media/archiwum/Dokumenty/ -name '*XYZ' -exec cp {} /media/archiwum/Dokumenty/XYZ/ \; Katalog XYZ jest utworzony, a pliki się nie kopiują.... ciach... Znajdź różnicę - "w nazwie zawierają "xyz"" a "kończą się na "XYZ"" Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 10, 2010 Autor Zgłoszenie Share Napisano Marzec 10, 2010 ciach... ciach... ciach... Znajdź różnicę - "w nazwie zawierają "xyz"" a "kończą się na "XYZ"" A przyjrzałeś się poleceniu które napisałem powyżej? Jakie tam są litery? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
multics Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 Nie, po co? Dla ułatwienia dodam że w powyższym zadaniu są dwie różnice Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 -iname i nie ma rozróżniania wielkości liter Skoro znajduje pliki to problem jest przy kopiowaniu. Pewnie pliki mają spację w nazwie, trzeba więc ująć w cudzysłów: -exec cp '{}' Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 10, 2010 Autor Zgłoszenie Share Napisano Marzec 10, 2010 No teraz działa. Wygląda to tak: find /media/archiwum/Dokumenty/ -iname 'XYZ*' -exec cp '{}' /media/archiwum/Dokumenty/XYZ/ \; Dzięki! Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
borzole Napisano Marzec 10, 2010 Zgłoszenie Share Napisano Marzec 10, 2010 To teraz zrób to za pomocą ** w czystym bash. Dodam tylko, że wykrywanie ukrytych plików włącza się osobnym przełącznikiem: shopt -s dotglob Find jest niewygodny w użyciu, gdy potrzeba wykonać więcej niż jedną operację na znalezisku. Argumentem za -exec musi być program i trzeba kombinować, aby wykonać funkcję ze skryptu np. skrypt musi wywołać sam siebie z parametrem, do którego przypisana jest ta funkcja. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Fany Napisano Marzec 11, 2010 Autor Zgłoszenie Share Napisano Marzec 11, 2010 To teraz zrób to za pomocą ** w czystym bash. Dodam tylko, że wykrywanie ukrytych plików włącza się osobnym przełącznikiem: shopt -s dotglob Widzę że mnie motywujesz do dalszej nauki. Dzięki! Trochę z czasem u mnie kiepsko... Temat jednak jest bardzo ciekawy i pewnie jakbym przysiadł to by mnie "wciągnęło". Ale nie mówię nie. Jak coś wymyślę (czytaj: jak będę miał czas) to podzielę się efektami albo znów będę męczył o pomoc... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się