Используйте комбинацию find
и команду file
. Это требует, чтобы вы проверили вывод команды file
в вашем каталоге; ниже я предполагаю, что файлы, которые вы хотите проверить, указаны как ascii. ИЛИ, используйте grep -v
для фильтрации двоичных файлов.
#!/bin/bash
dir1=/path/to/first/folder
dir2=/path/to/second/folder
cd $dir1
files=$(find . -type f -print | xargs file | grep ASCII | cut -d: -f1)
for i in $files;
do
echo diffing $i ---- $dir2/$i
diff -q $i $dir2/$i
done
Поскольку вы, вероятно, знаете имена огромных двоичных файлов, поместите их в хеш-массив и выполняйте сравнение только тогда, когда файл не находится в хеш-коде, что-то вроде этого:
#!/bin/bash
dir1=/path/to/first/directory
dir2=/path/to/second/directory
content_dir1=$(mktemp)
content_dir2=$(mktemp)
$(cd $dir1 && find . -type f -print > $content_dir1)
$(cd $dir2 && find . -type f -print > $content_dir2)
echo Files that only exist in one of the paths
echo -----------------------------------------
diff $content_dir1 $content_dir2
#Files 2 Ignore
declare -A F2I
F2I=( [sqlite3]=1 [binfile2]=1 )
while read f;
do
b=$(basename $f)
if ! [[ ${F2I[$b]} ]]; then
diff $dir1/$f $dir2/$f
fi
done < $content_dir1