Rekursywne kopiowanie plików między katalogami

1

Witam Wszystkich,

Mam do Was takie pytanie. Próbuje zrobić coś takiego:

(get-childitem -Path "C:\Users\lukasz\Desktop\*" -Recurse | Where-Object {$_.CreationTime -ge (Get-Date).date}) | copy-item -destination "D:\copy" -Recurse

Skrypt działa i przenosi katalogi z zawartością do wskazanej lokalizacji "COPY", ale też przeszukuje wskazany katalog "Desktop" i z niego kopiuje wszystkie pliki typu : TXT, PDF do wskazanego katalogu "COPY".

Jak zrobić żeby przenosił katalogi z cała zawartością zamiast.

1

Chwila, bo nie rozumiem. Co takiego dokładnie chciałbyś żeby ten skrypt robił? Chciałbyś żeby przeniósł dzieci w katalogu do innego katalogu jeśli mają datę stworzenia późniejszą niż jakaś wskazana?

1

Chodzi mi o to, że mam:
katalog źródło z datą XYZ - katalog-katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
wykonuje skrypt i przenosi mi tak:
katalog destination -katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
oraz
file
file
file1
file1
file1
file2
file2
file2
file3
file3
file3.

jak to zrobić żeby kopiował:
katalog źródło - katalog-katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
katalog destination -katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.

0
utak utak napisał(a):

Chodzi mi o to, że mam:
katalog źródło z datą XYZ - katalog-katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
wykonuje skrypt i przenosi mi tak:
katalog destination -katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
oraz
file
file
file1
file1
file1
file2
file2
file2
file3
file3
file3.

jak to zrobić żeby kopiował:
katalog źródło - katalog-katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.
katalog destination -katalog/file/file/file itd, następny katalog1/file1/file1 itd. następny katalog2/file2/file2 itd. następny katalog3/file3/file3 itd.

Sorry, ale nic nie rozumiem z tego opisu.

1

Nie wiem jak Ci to opisać.
Może tak:

mam Folder Główny w nim folder 1, folder 2, folder3 . W każdym z folderów są pliki .txt, .jpeg, .rar, .zip, .doc - wszystko jest np. z datą dzisiejszą.
I teraz jak wykonuje skrypt to:
przenosi mi Folder Główny z zawartymi folderami oraz z plikami do wskazanej lokalizacji. Dodatkowo do Folderu głównego kopiuje wszystkie .txt, .jpeg, .rar, .zip, .doc z dzisiejszą datą.

screen 1 przed kopiowaniem

przed.jpg

screen po kopiowaniu
po.jpg

A moim zamysłem jest kopiowanie 1 do 1 czyli screen 1

0

Rozumiem ze na screenie folder główny to u Ciebie Nowy folder?

Czyli chcesz coś takiego?

  • Podaj datę, np 2021.02.07
  • Wyszukaj w podfolderach folderu głównego (Nowy folder/1, Nowy folder/2, Nowy folder/3) pliki o rozszerzeniach .txt, .jpeg, .rar, .zip, .doc, których data utworzenia to podana 2021.02.07
  • Przenieś te pliki do nowej lokacji, w odpowiednich podfolderach Folder docelowy/1/file.jpg, Folder docelowy/2/file.doc
  • Skopiuj do folderu Nowy folder wszystkie te pliki "na płasko", czyili Nowy folder/file.txt, Nowy folder/file.jpg

Tak?

0

Tak, to Nowy folder, wybacz nie zwróciłem uwagi na to.
Chodzi mi o to, że ma szukać np. w C:/Nowy folder/ find date 2021.02.07, czyli przeszukuje cały folder Nowy folder. Tam znajduje wszystkie z datą 2021.02.07 w tym Nowy folder z pod folderami 1, 2, 3, natomiast nie szuka wewnątrz folderów 1, 2, 3, tylko kopiuje z całą zawartością.

dla linux to będzie
TODAY="+%Y-%m-%d"
find /Nowy-folder -newrmt &(date +%Y-%m-%d ' $TODAY')-type d -exec cp {} /mnt/share;

0

@utak utak: ja też nie do końca rozumiem co masz, i co chcesz uzyskać.
Przyznaję, że nie testowałem Twojego kodu i nie wiem jaki jest efekt jego działania, ale wydaje mi się, że ostatni człon polecenia wrzuca wszystkie pliki spełniające warunek do jednej ścieżki

copy-item -destination "D:\copy" -Recurse

Nie wiem, czy takie było Twoje zamierzenie? Osobiscie nie stosowałbym w tym przypadku przełącznika "Recurse", bo w przypadku gdy w potoku do kopiowania trafi folder do cały łącznie z zawartością zostanie skopiowany do folderu docelowego.
I wydaje mi się, że właśnie tak to u Ciebie działa, że w folderze docelowym pliki są w strukturze drzewa, oraz w folderze głównym.

Nie pamiętak jak przenieść ścieżkę bez kombinacji (i czy wg Twojego schematu jest to możliwe), bo jeśli nie, to należy na spreparowanym obiekcie przenieść do polecenia copy spreparowaną ścieżkę docelową. Myślę, że rozsądne będzie użycie ForEach-Object.
Zmieniłbym też filtr na coś w stylu:

Where-Object {$_.CreationTime -ge (Get-Date).AddDays(-1)}) 

... ale to wydaje się być kosmetyką.

Może najpierw zamiast kopiować, wyświetl pliki które łapią się w filtrze. Jeśli tu jest ok, to debuguj dalej.

powodzenia

--
Paweł

0 użytkowników online, w tym zalogowanych: 0, gości: 0