UNIX - использование «найти» для поиска дубликатов файлов - PullRequest
0 голосов
/ 16 октября 2011

Привет, у меня есть две директории a1dir1 и a1dir2.Я хочу найти файлы, уникальные для каждой директории.Это список

$ ls -al ~david/a1dir1 --time-style=long-iso
total 56
drwxr-xr-x  4 david users  4096 2011-10-11 21:20 .
drwx--x--x 12 david users  4096 2011-10-03 16:42 ..
-rw-------  1 david users    60 2011-09-20 17:43 F3.DAT
-rw-------  1 david users    40 2011-09-20 17:43 f1
-rw-------  1 david users   270 2011-09-20 17:43 f2.c
-rwx------  1 david users  7539 2011-09-20 17:43 make.socket
-rw-------  1 david users   418 2011-09-20 17:43 make.socket.c
-rw-------  1 david users 11843 2011-09-20 17:43 prog1
-rw-------  1 david users   138 2011-09-20 17:43 prog1.c
lrwxrwxrwx  1 david users     4 2011-10-11 21:17 s.link -> f2.c
drwx------  2 david users  4096 2011-09-20 17:43 test1.dir
drwx------  2 david users  4096 2011-09-20 17:43 test3.dir
srwx------  1 david users     0 2011-10-11 21:18 unix.socket

$ ls -al ~david/a1dir2 --time-style=long-iso
total 192
drwxr-xr-x  5 david users   4096 2011-10-11 21:23 .
drwx--x--x 12 david users   4096 2011-10-03 16:42 ..
-rw-------  1 david users     39 2011-09-20 17:43 .hidden.file
-rw-------  1 david users     60 2011-09-20 17:43 F3.DAT
-rw-------  1 david users     40 2011-09-20 17:43 f1
-rw-------  1 david users     88 2011-09-20 17:43 file2
-rwx------  1 david users   7539 2011-09-20 17:43 make.socket
-r--------  1 david users 135838 2011-09-20 17:43 phones
-rw-------  1 david users    138 2011-09-20 17:43 prog1.c
-rw-------  1 david users    120 2011-09-20 17:43 prog2.c
lrwxrwxrwx  1 david users      4 2011-10-11 21:23 s.link -> f2.c
drwx------  2 david users   4096 2011-09-20 17:43 test1.dir
drwx------  2 david users   4096 2011-09-20 17:43 test2.dir
drwx------  2 david users   4096 2011-09-20 17:43 test3.dir

(я передаю a1dir1 и a1dir2 в качестве аргументов) Я попытался:

for file in $(ls -al $1) 
do 
   find $2 -name "$file" 2> myerrors 
done

, хотя этот код просто выводит каждый файл в a1dir1?Любая помощь будет принята с благодарностью:)

Ответы [ 3 ]

0 голосов
/ 16 октября 2011

Вы можете попробовать использовать diff или dircmp в зависимости от вашей ОС / доступного программного обеспечения. Вот пример с GNU Diff:

diff --brief dir1 dir2

Редактировать

Из вашего комментария попробуйте это:

diff --brief dir1 dir2 | \
cut -c 9- | \
awk -F': ' '{print $1"/"$2}' | \
while read filename
do
  ls -ld $filename
done
0 голосов
/ 16 октября 2011

Это не обрабатывает имена файлов с пробелами или подкаталогами процессов, но в любом случае должно работать лучше, чем ваш код:

for file in $(ls -A $1) 
do 
   ls -l $2/$file 2>/dev/null
done
0 голосов
/ 16 октября 2011

Без поиска пример может быть:

 diff -q trunk tmp/trunk | grep -v Common | grep -v differ
...