Προσπαθώ να βρω τα αρχεία που υπάρχουν σε έναν κατάλογο αλλά όχι στον άλλο, προσπάθησα να χρησιμοποιήσω αυτή την εντολή:
diff -q dir1 dir2
Το πρόβλημα με την παραπάνω εντολή είναι ότι βρίσκει τόσο τα αρχεία στο dir1
αλλά όχι στο dir2
όσο και τα αρχεία στο dir2
αλλά όχι στο dir1
,
Προσπαθώ να βρω τα αρχεία στο dir1
αλλά όχι στο dir2
μόνο.
Ακολουθεί ένα μικρό δείγμα του πώς μοιάζουν τα δεδομένα μου
dir1 dir2 dir3
1.txt 1.txt 1.txt
2.txt 3.txt 3.txt
5.txt 4.txt 5.txt
6.txt 7.txt 8.txt
Ένα άλλο ερώτημα που έχω στο μυαλό μου είναι πώς μπορώ να βρω τα αρχεία στο dir1
αλλά όχι στο dir2
ή στο dir3
με μία μόνο εντολή;
diff -r dir1 dir2 | grep dir1 | awk '{print $4}' > difference1.txt
Επεξήγηση:
Το diff -r dir1 dir2
δείχνει ποια αρχεία υπάρχουν μόνο στο dir1 και ποια μόνο στο dir2 και επίσης τις αλλαγές των αρχείων που υπάρχουν και στους δύο καταλόγους, αν υπάρχουν.
diff -r dir1 dir2 | grep dir1
δείχνει ποια αρχεία υπάρχουν μόνο στο dir1
awk
για να εκτυπώσετε μόνο το όνομα του αρχείου.
comm -23 <(ls dir1 |sort) <(ls dir2|sort)
Αυτή η εντολή θα σας δώσει τα αρχεία που βρίσκονται στο dir1 και όχι στο dir2.
Σχετικά με το σύμβολο <( )
, μπορείτε να το αναζητήσετε στο google ως 'process substitution'.
Το πρόσθετο DirDiff του vim είναι ένα άλλο πολύ χρήσιμο εργαλείο για τη σύγκριση καταλόγων.
vim -c "DirDiff dir1 dir2"
Όχι μόνο καταγράφει ποια αρχεία είναι διαφορετικά μεταξύ των καταλόγων, αλλά σας επιτρέπει επίσης να επιθεωρήσετε/τροποποιήσετε με το vimdiff τα αρχεία που είναι διαφορετικά.