Powiedzmy, że kopiuję i wklejam pliki z folderu A, który obejmuje:
Folder A:
file1.cfg
file2.txt
file3.esp
file4.bsa
do folderu B, który po aktualizacji ma:
Folder B:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
Czy istnieje sposób na usunięcie wszystkich plików z folderu A znajdujących się w folderze B (oznaczonych *)? Oprócz ręcznego wybierania każdego z nich i usuwania go, lub wciśnięcia Ctrl-Z zaraz po kopiowaniu i wklejeniu
Wolałbym metodę Windows lub oprogramowanie, które mogłoby to zrobić
dzięki!
windows
windows-explorer
DarkFire13
źródło
źródło
Odpowiedzi:
Istnieje darmowe oprogramowanie o nazwie WinMerge . Możesz użyć tego oprogramowania do dopasowania duplikatów. Najpierw użyj
File
→Open
i wybierz oba katalogi, z folderem z plikami, które chcesz zachować po lewej, i tymi, których nie chcesz po prawej stronie. Następnie przejdź doView
i odznaczShow Different Items
,Show Left Unique Items
orazShow Right Unique Items
. Spowoduje to pozostawienie identycznych plików pozostałych na liście. Następnie wybierzEdit
→Select All
, kliknij prawym przyciskiem myszy dowolny plik i kliknijDelete
→Right
. Spowoduje to usunięcie duplikatów z folderu po prawej stronie.źródło
Można to zrobić za pomocą wiersza polecenia za pomocą polecenia
forfiles
Załóżmy, że masz folder A w
c:\temp\Folder A
folderze, a folder B wc:\temp\Folder B
Poleceniem byłoby wtedy:
Po wykonaniu tej czynności w folderze B zostaną usunięte wszystkie pliki znajdujące się w folderze A. Należy pamiętać, że jeśli folder B zawiera pliki o tej samej nazwie, ale nie o tej samej treści, nadal zostaną usunięte.
Można to rozszerzyć, aby działało również z folderami w podfolderach, ale z obawy, że stanie się to niepotrzebnie skomplikowane, postanowiłem nie publikować. Wymagałoby to opcji / s i @relpath (oraz dalszego testowania xD)
źródło
Możesz użyć tego skryptu PowerShell:
Mam nadzieję, że jest to dość oczywiste. Sprawdza każdy element w folderze B, sprawdza, czy w folderze A jest element o tej samej nazwie, a jeśli tak, usuwa element z folderu A. Pamiętaj, że końcowy
\
w ścieżkach folderów jest ważny.Wersja jednowierszowa:
Jeśli nie obchodzi Cię, czy w konsoli pojawi się zalew czerwonych błędów, możesz usunąć
-EA 'SilentlyContinue'
.Zapisz go jako
.ps1
plik, npdedupe.ps1
. Przed uruchomieniem skryptów PowerShell musisz włączyć ich wykonywanie:Następnie będziesz mógł ją wywołać,
.\dedupe.ps1
gdy znajdziesz się w folderze, który ją zawiera.źródło
rsync
rsync
to program służący do synchronizacji katalogu. Od wielu (naprawdę wielu) opcje masz tam są siebie wyjaśniając--ignore-non-existing
,--remove-source-files
i--recursive
.Możesz to zrobić
jeśli przypuszczamy, że masz pliki w katalogu A (4) i B (4 + 2).
źródło
Odpowiedź LPChip jest lepsza.
Ale ponieważ zacząłem uczyć się języka Python, pomyślałem: „Do licha, dlaczego nie napisać skryptu Python jako odpowiedzi na to pytanie?”.
Zainstaluj Python i Send2Trash
Musisz zainstalować Python, zanim będziesz mógł uruchomić skrypt z wiersza poleceń.
Następnie zainstaluj Send2Trash, aby usunięte pliki nie zniknęły bezpowrotnie, ale trafiły do kosza systemu operacyjnego:
Utwórz skrypt
Utwórz nowy plik, na przykład o nazwie
DeleteDuplicateInFolderA.py
Skopiuj następujący skrypt do pliku.
Stosowanie
Tryb suchego uruchamiania, który pokazuje, które pliki zostaną usunięte bez usuwania plików:
Tryb usuwania plików, który rzeczywiście usuwa pliki, więc bądź ostrożny:
Wyjście z trybu pracy suchej
Wyjście z trybu usuwania plików
Test jednostkowy
Jeśli chcesz przetestować powyższą aplikację, utwórz plik o nazwie
DeleteDuplicateInFolderATest.py
i wklej do niego następujące wpisy:źródło
Korzystanie z bash
Na pewno możesz być bardziej bezpieczny, sprawdzając, czy plik tam jest, lub sprawdzając, czy nazwa pliku jest bezpieczna. Ale zakładając, że po prostu chcesz to zrobić i nie masz żadnych śmiesznie nazwanych plików
folderB
- jest to szybki i brudny sposób na zrobienie tego. (i możesz użyć emulatora bash dostarczonego z git , jeśli nie korzystasz z bash Win10 +)źródło
Każdy program w stylu NC, taki jak Total Commander, ma polecenie różnic w katalogu, które wybiera pliki na obu kartach, które różnią się od innych kart. Wywołaj to polecenie
tab
do większego katalogu (B), odwróć wybór za pomocą*
i usuń. Ma to tę zaletę, że nie usuwa plików, które mogły się zmienić (jakoś) i nie są takie same, chociaż zgadzają się z nazwą. Możesz użyć tej samej komendy diff katalogu, aby zlokalizować je po usunięciu.Wydaje mi się, że utknąłem w latach dziewięćdziesiątych ... ale tak naprawdę nie widziałem nic bardziej eleganckiego od :-) Jak dotąd jest to jedyna odpowiedź, która wymaga zaledwie 5 naciśnięć klawiszy i żadnego skryptu / wiersza poleceń.
źródło
Metoda Windows
Jeśli zawsze musisz skopiować pliki z jednej lokalizacji do drugiej, a następnie upewnić się, że pliki, które zostały pomyślnie skopiowane, zostaną również usunięte z oryginalnej lokalizacji źródłowej, poniżej znajduje się rozwiązanie skryptu wsadowego, którego można użyć do zautomatyzowania całego zadania za pomocą wystarczy kliknąć każdy bieg.
Pamiętaj, aby ustawić
SourceDir
aDestDir
zmienne odpowiednio do swoich potrzeb.Dodatkowo, w części skryptu poniżej, ponieważ
("%SourceDir%\*.*") DO
możesz po prostu zmienić*.*
wartość, aby była bardziej wyraźna dla nazw plików (File A.txt
) lub rozszerzeń plików (*.wav
) w razie potrzeby.Dalsze zasoby
źródło