Допустим, я копирую и вставляю файлы из папки A, которая включает в себя:
Папка А:
file1.cfg
file2.txt
file3.esp
file4.bsa
в папку B, которая после обновления имеет:
Папка Б:
apples.mp3
file1.cfg *
file2.txt *
file3.esp *
file4.bsa *
turtles.jpg
Есть ли способ удалить все файлы из папки A, которые находятся в папке B (помечены *)? Помимо ручного выбора каждого из них и его удаления, или ctrl-Z'ing сразу после копирования-вставки
Я бы предпочел либо метод Windows или какое-то программное обеспечение, которое могло бы сделать это
Благодарность!
windows
windows-explorer
DarkFire13
источник
источник
Ответы:
Там есть свободное программное обеспечение под названием WinMerge . Вы можете использовать это программное обеспечение для сопоставления дубликатов. Сначала используйте
File
→Open
и выберите обе директории, с папкой, в которой файлы, которые вы хотите сохранить, слева, и папками, которые вы не сохраняете справа. Затем перейдитеView
и снимите флажокShow Different Items
,Show Left Unique Items
иShow Right Unique Items
. Это оставит только идентичные файлы, оставленные в списке. После этого выберитеEdit
→Select All
, щелкните правой кнопкой мыши по любому файлу и нажмитеDelete
→Right
. Это удалит дубликаты из правой папки.источник
Это можно сделать через командную строку с помощью команды
forfiles
Предположим, что у вас есть папка A
c:\temp\Folder A
, а папка B - вc:\temp\Folder B
Команда будет тогда:
После того, как это будет сделано, в папке B будут удалены все файлы, которые присутствуют в папке A. Имейте в виду, что если в папке B есть файлы с тем же именем, но не одинаковым содержимым, они все равно будут удалены.
Можно также расширить это для работы с папками в подпапках, но из-за страха, что это станет ненужным, я решил не публиковать его. Для этого потребуются параметры / s и @relpath (и дальнейшее тестирование xD)
источник
Вы можете использовать этот скрипт PowerShell:
Надеюсь, это довольно очевидно. Он просматривает каждый элемент в папке B, проверяет, есть ли элемент с таким же именем в папке A, и, если это так, удаляет элемент папки A. Обратите внимание, что финал
\
в путях к папкам важен.Однострочная версия:
Если вас не волнует, получаете ли вы красные ошибки в консоли, вы можете удалить
-EA 'SilentlyContinue'
.Сохраните его как
.ps1
файл, напримерdedupe.ps1
. Прежде чем вы сможете запускать скрипты PowerShell, вам необходимо включить их выполнение:Тогда вы сможете вызывать его,
.\dedupe.ps1
находясь в папке, в которой он находится.источник
rsync
rsync
это программа, используемая для синхронизации каталога Из многих (действительно многих) вариантов, которые у вас есть, есть объяснение--ignore-non-existing
,--remove-source-files
и--recursive
.Ты можешь сделать
если мы предположим, что у вас есть файлы в каталогах A (4) и B (4 + 2).
источник
Ответ LPChip - лучший.
Но поскольку я начал изучать Python, я подумал: «Черт, почему бы не написать скрипт Python в качестве ответа на этот вопрос?»
Установите Python и Send2Trash
Вам нужно будет установить Python, прежде чем вы сможете запустить скрипт из командной строки.
Затем установите Send2Trash, чтобы удаленные файлы не исчезали безвозвратно, а попадали в корзину ОС:
Создать скрипт
Создайте новый файл с именем, например
DeleteDuplicateInFolderA.py
Скопируйте следующий скрипт в файл.
использование
Режим пробного запуска, который показывает, какие файлы будут удалены без фактического удаления файлов:
Режим удаления файлов, который действительно удаляет файлы, поэтому будьте осторожны:
Выход из режима пробного запуска
Вывод режима удаления файла
Модульный тест
Если вы хотите протестировать приложение выше, создайте файл с именем
DeleteDuplicateInFolderATest.py
и вставьте в него следующие юнит-тесты:источник
Использование Bash
Конечно, вы можете быть более безопасным, проверив, существует ли файл, или проверив, является ли имя файла безопасным. Но если предположить, что вы просто хотите это сделать, и у вас нет смехотворно названных файлов
folderB
- это быстрый и грязный способ сделать это. (и вы можете использовать эмулятор bash, который поставляется с git , если вы не используете Win10 + bash)источник
Любая программа в стиле NC, такая как Total Commander, имеет команду разницы каталогов, которая выбирает файлы на обеих вкладках, которые отличаются от других вкладок. Вызовите эту команду,
tab
чтобы увеличить каталог (B), инвертировать выделение с помощью*
и удалить. Преимущество этого состоит в том, что вы не удаляете файлы, которые могли (как-то) измениться и не совпадают, хотя и совпадают по названию. Вы можете использовать ту же команду diff каталога, чтобы найти их после удаления.Я думаю, что застрял в девяностых ... но я не видел ничего более элегантного с тех пор :-) Пока что это единственный ответ, который требует всего лишь 5 нажатий клавиш и никаких скриптов / командной строки вообще.
источник
Метод Windows
Если вам всегда нужно копировать файлы из одного места в другое, а затем после этого убедиться, что файлы, которые были успешно скопированы, также будут удалены из исходного исходного местоположения, то ниже приведено решение для пакетного сценария, которое можно использовать для автоматизации всей этой задачи с помощью всего лишь просто нажмите каждый прогон.
Обязательно установите
SourceDir
и теDestDir
переменные , соответственно , для ваших нужд.Кроме того, в приведенной ниже части скрипта
("%SourceDir%\*.*") DO
вы можете просто изменить*.*
значение, чтобы оно было более явным для имен файлов (File A.txt
) или расширений файлов (*.wav
) по мере необходимости.Дополнительные ресурсы
источник