Je suis en train d'écrire un script rapide dans Ruby qui passe en revue tout le contenu de deux dossiers, et retourne une liste de tous les fichiers qui sont pas dans l'un des deux dossiers. À l'heure actuelle ce que je fais est de stocker les chemins de tous les fichiers de chaque répertoire dans un tableau:Comparer le contenu de 2 dossiers et supprimer les fichiers avec le même nom qui sont présents dans les deux dossiers
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.
Le problème que j'ai est que quand je tente de soustraire les deux tableaux (array plus grand - petit tableau) pour obtenir les fichiers restants, j'obtiens un tableau vide. Raison que je reçois est parce que les chemins complets essaient d'être soustraits au lieu de simplement les noms de bas. Ex: ~/dossier1/fichier.txt! = ~/Dossier2/fichier.txt Comment puis-je trouver si un fichier avec le même nom est dans deux dossiers, et le retirer d'une liste afin que les seuls fichiers restants sont ceux qui ne sont pas présent dans les deux dossiers?
Cela ne fonctionnera pas avec les répertoires imbriqués, c'est-à-dire 'dir1/file.txt' et' dir2/subdir1/file.txt' seront considérés comme ayant le même chemin relatif, alors qu'ils ne le sont pas. –
Le chemin est ignoré avec File.basename(). Il renvoie uniquement le nom de fichier sans sa partie de répertoire. File.basename ('~/rep1/file.txt') et File.basename ('~/dir2/subdir1/file.txt') renvoient 'file.txt'. – Alkaline