Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2011-09-12 08:07:27

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

BASH i kopiowanie jednego pliku spośród wielu

Witam! Mam takie szybkie pytanie - wie ktoś może jak najprościej wykonać kopiowanie pliku
spośród wielu innych w bashu? Tzn mam katalog A w którym znajdują się różne pliki np:


test.2011.09.11.13.33.DAT
test.2011.09.11.13.27_Log.DAT
test.2011.09.10.13.27_Log.DAT
test.2011.09.10.13.33.DAT
test.2011.09.09.13.27_Log.DAT
test.2011.09.09.13.33.DAT

ja chciałem kopiować do katalogu B tylko plik który zawiera w nazwie datę wczorajszą i nie jest to log.
Czyli w powyższym przypadku to test.2011.09.11.13.33.DAT. Był bym wdzięczny za podpowiedź.

Ostatnio edytowany przez debbie (2011-09-12 08:07:52)


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#2  2011-09-12 08:19:21

  azhag - Admin łajza

azhag
Admin łajza
Skąd: Warszawa
Zarejestrowany: 2005-11-15

Re: BASH i kopiowanie jednego pliku spośród wielu

nie sprawdzałem czy działa, ale z grubsza w ten sposób:

Kod:

find katalog ! -name "*Log*" -name "*DATA*" -exec cp '{}' dokąd ';'

Błogosławieni, którzy czynią FAQ.
opencaching :: debian sources.list :: coś jakby blog :: polski portal debiana :: linux user #403712

Offline

 

#3  2011-09-12 09:21:25

  debbie - Użytkownik

debbie
Użytkownik
Zarejestrowany: 2006-09-19

Re: BASH i kopiowanie jednego pliku spośród wielu

DZIĘKÓWKA WIELKA! O to właśnie chodziło!


debbie
Wrócę jak zjem zupę i drugie danie - tyle
a oto ta zupa:

Offline

 

#4  2011-09-12 09:56:05

  Minio - Użyszkodnik

Minio
Użyszkodnik
Skąd: Poznań, Polska
Zarejestrowany: 2007-12-22
Serwis

Re: BASH i kopiowanie jednego pliku spośród wielu

Można też tak:

Kod:

shopt -s extglob
cp test.$(date --date=yesterday +%Y.%m.%d)!(*_Log*).DAT cel

Albo tak, o ile te pliki są w jednym katalogu:

Kod:

for file in /sciezka/do/katalogu/*; do if basename "$file" |grep $(date --date=yesterday +%Y.%m.%d) |grep -q -v "_Log"; then cp "$file" cel; fi; done

W drugim przypadku zamiast grep-ów można użyć konstrukcji case. Druga konstrukcja powinna też działać ze wszystkimi powłokami.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)