32-разрядные приложения используют меньше поршня. Таким образом, иногда желательно использовать 32-разрядную ОС.
Существует ответ детали, сравнивающий использование памяти на askubuntu форуме здесь.
WilQu уже отвечают на вопрос размера страницы, таким образом, я не собираюсь повторять его здесь.
См. Ответ для аналогичного вопроса с двух недель назад.
find . -type f -exec md5sum {} + | sort | sed 's/ */!/1' | awk -F\| 'BEGIN{first=1}{if($1==lastid){if(first){first=0;print lastid, lastfile}print$1, $2} else first=1; lastid=$1;lastfile=$2}'
Поскольку вы хотите сравнить их по контенту, использование хэшей, кажется, способ сделать это.
Вы можете использовать команду find
, чтобы получить список путей файлов каталога. Опция -Type F
оставит все каталоги и только выходные пути к регулярным файлам. Опция -EXECEC MD5SUM {} \;
будет принимать найденные пути и дает им команду md5sum
, чтобы превратиться в список hash md5 + их filepaths (md5_hash / путь / к /файл').
Мы проводят этот список в команду Cut
. Первый вариант -F 1
говорит об этом только для первого столбца (хэши). Второй -D ''
-D ''
говорит ему использовать пространственный символ в качестве разделителя между столбцами. По умолчанию это вкладка.
Мы проводят этот список хэшей в команду сортировки, чтобы облегчить diff
.
Оператор <(команду)
называется Подстановка процесса . Он принимает вывод команды и превращает его в псевдо-файл для команд, которые требуют их в качестве ввода (для менее простого объяснения, следуйте по ссылке). Таким образом, он выглядит diff
, как если бы мы хотим сравнить два файла.
:~$ diff <(find folder1/ -type f -exec md5sum {} \; | cut -f 1 -d ' ' | sort) \
<(find folder2/ -type f -exec md5sum {} \; | cut -f 1 -d ' ' | sort)
Примечание: не забудьте заменить папку1 / и папку2 / с вашими фактическими папками.
Это даст вам список хэси MD5 файлов, которые являются только в одном или иной.
Если вы хотите знать, какие файлы на самом деле отсутствуют, вы можете сделать:
:~$ find folder1/ -type f -exec md5sum {} \; | sort | grep my_md5_hash
Если у вас есть много файлов, чтобы проверить, было бы разумно сохранить результаты двух <(найдите ... )
Команды и сравните их как:
:~$ diff list1.txt list2.txt
:~$ cat list1.txt | grep my_md5_hash
Предполагая, что это все файлы * .jpg, выполните:
Чтобы найти присутствующие файлы:
grep -Ff <(for i in path / to / directory / a> / *. jpg; do md5sum $ i | awk {'print $ 1'}; done) <(find path / to / directoryb / -iname "* .jpg" | xargs md5sum)
Цикл for
здесь создает список контрольных сумм md5 всех файлов *. jpg
в каталоге 'a', и find
здесь будет создать список контрольных сумм md5 всех файлов *. jpg
в каталоге 'b' (включая каталоги).
grep -fF
сравнит эти два списка, и полная команда выдаст двухколоночный вывод, где первый столбец будет контрольной суммой md5 файлов, которые присутствуют, а второй столбец будет именем файла ( с полным путем) файлов, которые совпадают в каталоге 'b'. Вы можете использовать дополнительный | awk {'print $ 2'}
, если вы хотите получить только имена файлов.
Чтобы найти отсутствующие файлы:
grep -vFf <(for i in path / to / directory / a> / *. Jpg; do md5sum $ i | awk {'print $ 1'}; готово ) <(find path / to / directoryb / -iname "* .jpg" | xargs md5sum
)
Выполняет те же действия, что и первая команда grep, но использует -v
возможность перечислить только то, что не совпадает.
Что вы ищете:
Если все файлы в каталоге 'a' присутствуют, вторая команда grep не должна возвращать никаких результатов.
Замените * .jpg любым расширением, которое может понадобиться для поиска.
Из man
страницы grep
:
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty file contains zero patterns, and therefore matches nothing.
(-f is specified by POSIX.)
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is
specified by POSIX.)
-v, --invert-match
Invert the sense of matching, to select non-matching lines.