Jeśli mam plik C:\foo.txt
, chcę rekurencyjnie wyszukiwać C:\OtherDir
pasujące pliki foo.txt
i zastępować je C:\foo.txt
.
czy to możliwe?
windows
file-transfer
automation
Geesh_SO
źródło
źródło
for
. Czego próbowałeś do tej pory i gdzie utknąłeś?find . -iname "foo.txt" -exec cp foo.txt "{}" \;
więc sądzę, że postarałem się zastosować podobny wzór. Wczoraj byłem trochę zestresowany, alefor /f "delims=" %A in ('dir /s/b foo.txt') do copy /Y foo.txt "%A"
Wydaje mi się, że to działa, ale czy w tym poleceniu są jakieś „gotchas”? Czy twoje rozwiązanie było inne?Odpowiedzi:
Możesz użyć polecenia DOS REPLACE
REPLACE [d:] [ścieżka] nazwa pliku [d:] [ścieżka] [/ A] [/ P] [/ R] [/ S] [/ U] [/ W]
Cel: Zastępuje przechowywane pliki plikami o tej samej nazwie z innej lokalizacji przechowywania.
To polecenie zastępuje pliki w oznaczeniu ścieżki docelowej plikami o tej samej nazwie w lokalizacji źródłowej. Za pomocą symboli wieloznacznych (? I *) można wskazać grupy nazw plików w katalogach źródłowych. NIE MOŻNA użyć tego polecenia do zastąpienia ukrytych plików lub plików systemowych.
Opcje
/ A - Dodaje pliki określone przez oznaczenie ścieżki źródłowej, które NIE istnieją w oznaczeniu ścieżki docelowej. Korzystając z tej opcji, możesz selektywnie dodawać pliki do katalogu: nie wpłynie to na plik w oznaczeniu ścieżki źródłowej, który ma taką samą nazwę jak plik w oznaczeniu docelowym. Tej opcji nie można używać w połączeniu z opcją / S.
/ P - Wyświetla monit przed zastąpieniem każdego pliku, umożliwiając podejmowanie decyzji na podstawie pliku po pliku, czy zezwolić na zastąpienie.
/ R - zastępuje zarówno pliki tylko do odczytu, jak i niechronione w katalogu docelowym. Bez tej opcji każda próba zastąpienia pliku tylko do odczytu spowoduje wyświetlenie komunikatu o błędzie i proces wymiany zostanie zakończony.
/ S - Działa zarówno w katalogu docelowym, jak i we wszystkich podkatalogach w katalogu docelowym. Nie można używać opcji / A razem z tą opcją.
/ U - zastępuje pliki na dysku docelowym lub w katalogu, które są starsze niż ich odpowiedniki na dysku źródłowym.
/ W - czeka na włożenie dysku przed rozpoczęciem procesu wymiany.
Przykłady
zamień * .dat a: / u
„/ U” jest bardzo ważne. Oznacza „aktualizuj” i mówi komendzie replace, aby skopiowała tylko te pliki źródłowe, które (a) znajdują się również w katalogu docelowym i które (b) są nowsze niż ich odpowiedniki w katalogu docelowym.
Możesz także użyć replace, aby skopiować tylko te pliki, które nie istnieją w katalogu docelowym - to znaczy tylko nowe pliki. Na przykład:
zamień * .dat a: / a
Jest to interpretowane jako „skopiuj na dysk a: wszystkie pliki w bieżącym katalogu z rozszerzeniem„ .dat ”, które nie są jeszcze obecne na dysku a:.
Aby zachować aktualną kopię zapasową wszystkich plików w danym katalogu na dysku twardym, możesz użyć następującej pary poleceń zamiany razem:
zamień c: \ india a: \ india / u
zamień c: \ india a: \ india / a
źródło