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  2021-02-02 10:46:22

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

Witam... mam taki problem...
potrzebuję stworzyć skrypt w bashu który będzie przenosił pliki z jednego miejsca w drugi...z czego w drugim miejscu
wcześniej stworzy katalog z datą pobraną z nazwy pliku....lub jeśli folder już istnieje to wrzuci do niego te pliki.

Przykładowo:

źródło:

/pliki/folder/NAZWA1.2021-02-01.dum.gz
/pliki/folder/NAZWA1.2021-02-02.dum.gz
/pliki/folder/NAZWA1.2021-02-03.dum.gz
/pliki/folder/NAZWA2.2021-02-01.dum.gz
/pliki/folder/NAZWA2.2021-02-02.dum.gz
/pliki/folder/NAZWA2.2021-02-03.dum.gz

docelowo skrypt miałby przenosić pliki do:

/docelowy/folder/NAZWA1/2020-02/
/docelowy/folder/NAZWA2/2020-02/

czyli np stworzy w /docelowy/folder/NAZWA1 katalog z datą ( tylko rok i miesiąc ) i tam będzie wrzucał codziennie nowe pliki
osobno dla NAZWA1 i NAZWA2.
kwestia jest jeszcze taka...że jeśli miesiąc wskoczy na marzec ( pojawią się pliki marcowe )
to utworzy ten katalog z datą i tam będzie wrzucał pliki marcowe.
Ma ktoś może pomysł na to? Pozdrówki


dawid

Offline

 

#2  2021-02-02 11:11:24

  arecki - Użytkownik

arecki
Użytkownik
Skąd: 44 Bronson Lane Hensonville
Zarejestrowany: 2016-03-03

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

Jeśli poszczególne człony nazwy pliku mają stałe długości to można np. tak wyłuskać dane do tworzenia katalogów.

Kod:

nazwa=NAZWA1.2021-02-01.dum.gz;folder1=${nazwa:0:6};folder2=${nazwa:7:10};echo $folder1;echo $folder2
NAZWA1
2021-02-01

A jak człony mają zmienne długości to np. tak:

Kod:

echo NAZWA1.2021-02-01.dum.gz | awk -F'[.]' '{ print $1, $2 }'
NAZWA1 2021-02-01

Ostatnio edytowany przez arecki (2021-02-02 11:30:31)

Offline

 

#3  2021-02-02 11:36:02

  megabajt - Użytkownik

megabajt
Użytkownik
Skąd: Wrocław
Zarejestrowany: 2012-03-07

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

Kod:

#!/bin/bash

zro="/pliki/folder"
doc="/docelowy/folder"

for plik in "$zro"/*; do   
        nazwa="$(basename "$plik" | awk -F '.' '{print $1}')"
        data="$(basename "$plik" | awk -F '.' '{print $2}' | sed -r 's/-[0-9]+$//g')"
        mkdir -p "$doc/$nazwa/$data"
        mv "$plik" "$doc/$nazwa/$data"
done

Offline

 

#4  2021-02-02 12:07:00

  dawid77 - Użytkownik

dawid77
Użytkownik
Zarejestrowany: 2005-12-15

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

Dzięki wielkie Panowie za pomoc :D
Wszystko gra i buczy :) ogólnie to całą akcję załatwił skrypt megabajta :)
rozgryzam jeszcze sekcję awk -F '.' '{print $2}' | sed -r 's/-[0-9]+$//g') a właściwie sed'a w jaki sposób ogarnia ten wycinek


dawid

Offline

 

#5  2021-02-02 13:00:33

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

sed w tym przypadku pracuje nad ciągiem znaków np. '2021-02-01'. Regex jest zakotwiczony na końcu (znak specjalny $), więc próbuje się dopasować do

Kod:

-[jedna lub więcej cyfr][koniec ciągu]

W tym przypadku jedyne dopasowanie to

Kod:

-01

sed w takiej chyba najczęściej stosowanej postaci ma składnię:

Kod:

sed 's/SZUKANY_REGEX/NA_CO_ZAMIENIĆ/g'

W przykładzie megabajta sekcja NA_CO_ZAMIENIĆ jest pusta, więc sed wyszukuje i kasuje ten regex. Czyli po polsku - sed wyszukuje ostatnią w ciągu znaków liczbę, o ile jest poprzedzona znakiem '-' i ją kasuje.


a to feler westchnął seler

Online

 

#6  2021-02-02 13:42:36

  megabajt - Użytkownik

megabajt
Użytkownik
Skąd: Wrocław
Zarejestrowany: 2012-03-07

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

zamiast:

Kod:

sed -r 's/-[0-9]+$//g'

można też użyć:

Kod:

awk -F '-' '{print $1"-"$2}'

Offline

 

#7  2021-02-02 13:55:55

  seler - Użytkownik

seler
Użytkownik
Zarejestrowany: 2012-05-15

Re: Skrypt bash - przenoszenie plików z tworzeniem struktury katalogów

albo

Kod:

cut -d '-' -f 1-2

a to feler westchnął seler

Online

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
Nas ludzie lubią po prostu, a nie klikając w przyciski ;-)