проверьте, находятся ли все файлы от папки также в другой папке

32-разрядные приложения используют меньше поршня. Таким образом, иногда желательно использовать 32-разрядную ОС.

Существует ответ детали, сравнивающий использование памяти на askubuntu форуме здесь.

WilQu уже отвечают на вопрос размера страницы, таким образом, я не собираюсь повторять его здесь.

6
10.12.2014, 15:49
3 ответа

См. Ответ для аналогичного вопроса с двух недель назад.

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}'
0
27.01.2020, 20:29

Поскольку вы хотите сравнить их по контенту, использование хэшей, кажется, способ сделать это.

Вы можете использовать команду 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
3
27.01.2020, 20:29

Предполагая, что это все файлы * .jpg, выполните:

Чтобы найти присутствующие файлы:

grep -Ff <(for i in / *. jpg; do md5sum $ i | awk {'print $ 1'}; done) <(find

Цикл for здесь создает список контрольных сумм md5 всех файлов *. jpg в каталоге 'a', и find здесь будет создать список контрольных сумм md5 всех файлов *. jpg в каталоге 'b' (включая каталоги).

grep -fF сравнит эти два списка, и полная команда выдаст двухколоночный вывод, где первый столбец будет контрольной суммой md5 файлов, которые присутствуют, а второй столбец будет именем файла ( с полным путем) файлов, которые совпадают в каталоге 'b'. Вы можете использовать дополнительный | awk {'print $ 2'} , если вы хотите получить только имена файлов.

Чтобы найти отсутствующие файлы:

grep -vFf <(for i in / *. Jpg; do md5sum $ i | awk {'print $ 1'}; готово ) <(find )

Выполняет те же действия, что и первая команда 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. 
0
27.01.2020, 20:29

Теги

Похожие вопросы