Skocz do zawartości

[bash] Wyszukiwanie I Kopiowanie Plików


Fany

Rekomendowane odpowiedzi

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

* 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

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

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

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

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

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

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ę
×
×
  • Dodaj nową pozycję...