LINUX.ORG.RU

Shell - сравнить два каталога на повторяющиеся файлы.

 


0

2

Вывести на экран имена файлов из одного каталога, отсутствующих в другом каталоге. Имена каталогов задаются в виде агрументов.

Вначале можно подсчитать количество файлов:

num1=`cd $1 && find * -maxdepth 0 -type f | wc -w`
Затем удобно было бы загнать листинг файлов из обоих каталогов в массивы (как?) Ну а дальше - в циклах сравнить названия и вывести те, которые не повторяются:
 flg=0
 for ((i=1; i<$num1; i++)) do
    flg=0
    for ((j=1; j<$num2; j++)) do
      if [ "$i" -ne "$j" ]
        then if [ "$массив1[$i]" = "$массив2[$j]" ] then flg = 1 fi
      fi
    done
    if [ $flg != "1" ] then echo $массив1[$i] fi
 done
Что можете предложить / чяднт? Согласен, после C++ на shell перейти не очень просто...

$ meld dir1 dir2
anonymous
()

Вначале можно подсчитать количество файлов:

зачем?

Затем удобно было бы загнать листинг файлов из обоих каталогов в массивы (как?)

зачем?

#!/bin/bash

for i in "$1" "$2"; do
  pushd "$i" >/dev/null
  find * -maxdepth 0 -type f
  popd >/dev/null
done | sort | uniq -d
anonymous
()

обычный diff -r прокатит или нужно именно написать свой велосипед?

Pyzia ★★★★★
()
9 мая 2015 г.

{ ls «$1»; ls «$1»; ls «$2»; } | sort | uniq -c | awk '$1 == 2 { print $2 }'

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.