Nowe posty

Autor Wątek: przenoszenie plikow na podstawie ich nazwy  (Przeczytany 3999 razy)

visioner76

  • Gość
przenoszenie plikow na podstawie ich nazwy
« dnia: 2009-05-12, 12:33:13 »
Witam, mam problem z napisaniem skryptu, a wiec mam taka strukture katalogow:
/home/pliki/firmaA
/home/pliki/firmaB
/home/pliki/firmaC

w tych katalogach znajdują sie pliuki np 'plik1' 'plik2', ktore to uzytkownik musi zweryfikowac i zmienic nazwe, ustalilismy w fimie ze doipsuja na koncu nazwy pliku np '_v '  i pli po weryfikacji nazywa sie 'plik1_v' plik2_v'. oczywiscie plik przed weryfikacja tez zostaje.
po tej czynnosci w katalogu mamy:
/home/pliki/firmaA   - plik1, plik1_v, plik2, plik2_v

chcialbym teraz aby skrypt przenosilwszystkie pliki z podkatalogu /home/pliki do katalogu /home/archiwum, ale tylko wtedy kiedy dany plik jest zweryfikowany, czyli defakto sa dwa pliki plik1 oraz plik1_v

struktura katalogow musi byc zachowana.

prosze o pomoc

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #1 dnia: 2009-05-13, 01:57:36 »
Tych katalogów chyba nie jest aż tyle, albo nie są aż tak skomplikowane, żeby kombinować kopiowanie z zachowaniem ich struktury...

Jeśli dobrze zrozumiałem problem, zrobiłbym tak:
cp /home/pliki/firmaA/*_v /home/archiwum/firmaA/
cp /home/pliki/firmaB/*_v /home/archiwum/firmaB/
cp /home/pliki/firmaC/*_v /home/archiwum/firmaC/
cp /home/pliki/firmaD/*_v /home/archiwum/firmaD/
...
ew. można dorzucić jeszcze kasowanie pliku

rm /home/pliki/firmaA/*_v
rm /home/pliki/firmaB/*_v
rm /home/pliki/firmaC/*_v
rm /home/pliki/firmaD/*_v
...
Wielkiej filozofii w tym nie ma - proste, naiwne i spełnia swe zadanie.

Dla pozostałych paramterów polecam man cp oraz man rm

visioner76

  • Gość
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #2 dnia: 2009-05-13, 09:23:39 »
Jakby to mialo byc takie proste to pewnie nie pisalbym na forum

pliki muszą sie przenosic jezeli istnieje ich para, czyli 'plik1' oraz 'plik1_v', w przeciwnym wypadku zostaja. w katalogu /home/pliki jest sporo innych katalogow i ich struktura musi byc odwzorowana w /home/archiwum
liczba tych katalogow moze sie zwiekszac.

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #3 dnia: 2009-05-13, 10:28:09 »
Z opisu twojego problemu istnienie pliku 'plik1_v' implikuje 'plik1' - więc nie rób problemu z czegoś, co nie jest problemem. Jeśli masz plik kończący się na '_v ', normalny plik zawsze będzie istniał (bo z czego niby powstanie ten plik z _v?)

w manualu polecenia cp znajdziesz opcje, które odpowiadają za rekurencyjne kopiowanie katalogów z zachowaniem ich hierarchii.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #4 dnia: 2009-05-13, 10:50:48 »
O ile dobrze zrozumiałem problem przedstawiony przez visioner76, nie nie jest to takie banalne.

Może tak:
#!/bin/bash

PATHin="/home/pliki"
PATHout="/home/archiwum"

cd "$PATHin"
while read plik; do
plikbezv="${plik%_v}"
katalog=$( dirname "$plikbezv" )
mkdir -p "${PATHout}/${katalog}"
cp "$plik"     "${PATHout}/${katalog}"
cp "$plikbezv" "${PATHout}/${katalog}"
done < <( find . -type f -name *_v )
?

visioner76

  • Gość
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #5 dnia: 2009-05-13, 13:52:25 »
Dokladnie o to mi chodziło, wielkie dzieki.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
przenoszenie plikow na podstawie ich nazwy
« Odpowiedź #6 dnia: 2009-05-13, 17:38:53 »
Np