Сравните содержимое двух папок и удалите файлы с одинаковыми именами, которые присутствуют в обеих папках - PullRequest
0 голосов
/ 22 августа 2010

В настоящее время я пишу быстрый скрипт на Ruby, который просматривает все содержимое двух папок и возвращает список всех файлов, которых нет ни в одной из этих двух папок.В настоящее время я занимаюсь сохранением путей всех файлов каждого каталога в массиве:

Find.find(dir1) do |path|
  if File.file?(path)
    directory1_files << path # Add path to an array of file_paths for the 1st directory.
  end
end # I repeat the process for the second directory and store their paths in an array called directory2_files.

Проблема, с которой я сталкиваюсь, заключается в том, что при попытке вычесть два массива (больший массив - маленький массив) чтобы получить оставшиеся файлы, я получаю пустой массив.Причина, по которой я это понял, заключается в том, что полные пути пытаются вычесть, а не только базовые имена.Пример: ~ / folder1 / file.txt! = ~ / Folder2 / file.txt Как найти файл с одинаковым именем в двух папках и удалить его из списка, чтобы единственными оставшимися файлами были те, которых нетв обеих папках?

Ответы [ 2 ]

2 голосов
/ 22 августа 2010

Поскольку вы знаете пути к обеим папкам (т. Е. dir1 и dir2), я бы посоветовал рассчитать пути относительно них, чтобы позже вы могли сравнивать относительные пути (фактически игнорируя часть ~/folder1 путь). Используйте словари для сопоставления относительных и абсолютных путей (чтобы их можно было удалить).

Примерно так:

dir1 = '~/folder1'
directory1_files = {}

Find.find(dir1) do |path|
  if File.file?(path)
    relative_path = path[dir1.length, path.length]
    directory1_files[relative_path] = path
  end
end

Затем, когда у вас есть directory1_files и directory2_files, сравните их .keys, чтобы найти различия.

0 голосов
/ 22 августа 2010

Использовать File.basename (имя файла). Это также работает, если «filename» является объектом File.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...