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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1

Użytkownik


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
Offline



Użytkownik




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.
nazwa=NAZWA1.2021-02-01.dum.gz;folder1=${nazwa:0:6};folder2=${nazwa:7:10};echo $folder1;echo $folder2
NAZWA1
2021-02-01A jak człony mają zmienne długości to np. tak:
echo NAZWA1.2021-02-01.dum.gz | awk -F'[.]' '{ print $1, $2 }'
NAZWA1 2021-02-01Ostatnio edytowany przez arecki (2021-02-02 11:30:31)
Offline

Użytkownik


#!/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"
doneOffline

Użytkownik


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
Offline

Użytkownik


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
-[jedna lub więcej cyfr][koniec ciągu]
W tym przypadku jedyne dopasowanie to
-01
sed w takiej chyba najczęściej stosowanej postaci ma składnię:
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.
Offline

Użytkownik


zamiast:
sed -r 's/-[0-9]+$//g'
można też użyć:
awk -F '-' '{print $1"-"$2}'Offline

Użytkownik


albo
cut -d '-' -f 1-2
Offline
Strony: 1