2012-03-08 3 views
0

Мне нужно написать скрипт bash, который сканирует каталоги в текущем каталоге и генерировать значения контрольной суммы md5 для каждого файла в дереве каталогов. Он также должен сохранять относительный путь к файлам и печатать контрольные суммы в файле.Рекурсивно сканировать каталоги в bash

Например, если дерево каталогов выглядит следующим образом:

. 
├── d 
│   ├── file1.c 
│   └── file2.c 
├── e 
│   └── file3.c 
└── f 
    └── file4.cpp 

Выход должен быть чем-то вроде этого:

d8e8fca2dc0f896fd7cb4cb0031ba249 d/file1.c 
d8e8fca2dc0f896fd7cb4cb0031ba249 d/file2.c 
d8e8fca2dc0f896fd7cb4cb0031ba249 e/file3.c 
d8e8fca2dc0f896fd7cb4cb0031ba249 f/file4.cpp 

Но я не могу найти способ, чтобы сохранить путь к файлу, когда кд к ним ...

ответ

6
find . -type f -exec md5sum {} \; 

или ...

find . -type f | xargs -n 1 -d "\n" md5sum 
+0

Хорошо работает. Спасибо :) –

+1

Вы можете значительно улучшить производительность с помощью '+' терминатора с 'find' вместо' \; '; Первый собирает несколько аргументов, чтобы пройти как блок к '-exec'. Позднее порождает процесс для ** каждого ** аргумента. Инстанцирование процесса является дорогостоящим. В некоторых системах '-exec ...() +' может превосходить конвейер для 'xargs'. – JRFerguson

Смежные вопросы