В то время как bash
не имеет этого точного поведения, zsh
может сделать это с
setopt inc_append_history share_history
Посмотрите, Как Вы совместно используете историю между терминалами в zsh?
Если Вы просто хотите проверить, идентичны ли два файла или нет, использовать cmp
. Для получения вывода только для идентичных файлов Вы могли использовать
for f in ./*; do for i in ./*; do cmp -s "$f" "$i" && echo "Files $f and $i are identical"; done; done
diff
попытки произвести короткий, человекочитаемый список различий, и это может занять довольно много времени, поэтому избежать издержек, если Вам не нужны они.
Если необходимо найти идентичные файлы в списке, первый вид их размером, например, с
ls -S
затем для каждой группы идентичных размерных файлов, выполненных md5sum
на них для наблюдения легко, которые идентичны который.
Для больших файлов, могло быть более быстрым к первой контрольной сумме только короткая часть целого файла:
dd if=file bs=512 count=1 | md5sum
и затем выполните полную контрольную сумму только на подозрительных файлах.
Это должно помочь:
diff -rs dir1 dir2 | egrep '^Files .+ and .+ are identical$'
где dir1
и dir2
- два ваших каталога.
Если вы хотите распечатать только совпадающие каталоги из dir1
:
diff -rs dir1 dir2 | egrep '^Files .+ and .+ are identical$' | awk -F '(Files | and | are identical)' '{print $2}'
И аналогично, если вы хотите распечатать только совпадающие каталоги из dir2
:
diff -rs dir1 dir2 | egrep '^Files .+ and .+ are identical$' | awk -F '(Files | and | are identical)' '{print $3}'
Самый быстрый инструмент, написанный для этой цели - fdupes (он доступен в репозиториях пакетов Fedora и Ubuntu и ...)
Использование:
fdupes -r dir1 dir2