Question Différents fichiers de deux répertoires


Je voudrais comparer deux annuaires. J'ai essayé diff mais cela inclut les modifications à l'intérieur des fichiers. Tout ce que je veux c'est quelque chose comme ça

file a is just in /A 
file b is missing in /A 
file c changed
directory d is missing in /A 
directory e is just in /A

Je pense que cela est courant lors de l'application de correctifs de fichiers complets, mais je ne connais pas de bonne solution.


7
2017-10-28 19:59


origine




Réponses:


Vous cherchez

diff -rq (dir1) (dir2)

Preuve de concept:

#!/bin/sh
#create our test
mkdir -p /tmp/a/b
echo "test" >> /tmp/a/c
mkdir -p /tmp/a/d/e
echo "blah" >> /tmp/a/d/e/f #only exists here
mkdir -p /tmp/q/b
echo "testing" >> /tmp/q/c #/tmp/a/c shouldnt match
mkdir -p /tmp/q/d/e
echo "blah" >> /tmp/q/d/e/g #only exists here
diff -rq /tmp/a /tmp/q

résulte en :

Files /tmp/a/c and /tmp/q/c differ
Only in /tmp/a/d/e: f
Only in /tmp/q/d/e: g

17
2017-10-28 20:10





Vous avez juste besoin d'inclure le -q drapeau pour le rendre bref:

# diff -q dir1 dir2
Files dir1/both and dir2/both differ
Only in dir1/: one
Only in dir2:/ two

7
2017-10-28 20:08



Si vous avez besoin de sous-répertoires, ajoutez également l’option -r. - djhowell


Pour trouver des duplications, vous utilisez une:

fdupes -r1 dir1 dir2

Bien que les autres vous aient donné de nombreux bons conseils, vous devriez également essayer.

Si tu utilises

fdupes -rd dir1 dir2

il vous demandera quel fichier conserver (les autres seront supprimés). Extrêmement utile pour supprimer les doublons (je l’ai bien utilisé avec mes photos)

NOTE: oui, je sais que la question ne portait pas exactement sur ce sujet, mais peut-être que cela pourrait l'aider ou aider les autres;)


3
2017-10-29 07:32





Si vous souhaitez comparer des fichiers basés sur, par exemple, taille que vous pouvez faire:

# ls -al DIR_1 |awk '{print $5, $9}'|sort > 1.txt
# ls -al DIR_2 |awk '{print $5, $9}'|sort > 2.txt

et que:

# diff 1.txt 2.txt

pour savoir quels fichiers sont différents ou sont manquants. Je l'ai utilisé quand j'ai dû comparer deux répertoires avec très gros fichiers pour voir quels fichiers ne sont pas complètement téléchargés.


2
2017-08-26 11:18





Vous pouvez essayer un diff de ls:

ls A > a.txt
ls B > B.txt
diff a.txt b.txt

Pas une seule commande mais ça devrait marcher.


1
2017-10-28 20:07



En fait, il ne serait pas trop difficile de créer un script qui le fasse automatiquement et se nettoie après lui-même. Je pourrais écrire un tel script mais quelqu'un d'autre pourrait fournir une meilleure réponse. - Josh
Les réponses des autres diff -q dir1 dir2 sont bien meilleurs que les miens! - Josh


La réponse classique est la commande 'dircmp'. Il a ses défauts (par exemple, la sortie dans "pr" pour le paginer), mais si vous donnerait une liste d'objets uniquement dans le répertoire un ou le répertoire deux, puis pour les fichiers communs, il affichera "identique" ou 'différent' (et le type de fichier pour les non-fichiers - répertoires, etc.).

Le "diff -rq" est équivalent ou supérieur au résultat de "dircmp".


1
2017-10-28 22:50





J'ai demandé une question un peu similaire sur Stack Overflowet les réponses que j’ai eues pourraient vous intéresser. J'étais particulièrement intéressé par la recherche de fichiers manquants lors de la comparaison de deux répertoires.

J'ai également précisé que la solution devrait traiter des fichiers renommés (par exemple, si le fichier A qui se trouvait dans le répertoire 1 est également présent dans le répertoire 2 mais a été renommé, le script doit en être conscient).

La réponse que j'ai choisie (en haut) est très utile. Cela pourrait valoir le coup d’œil comme point de départ de votre script.


0
2017-08-26 11:39