Я хотів би створити контрольний список md5 для всіх файлів у каталозі.
Я хочу cat filename | md5sum > ouptput.txt
. Я хочу зробити це в 1 крок для всіх файлів у моєму каталозі.
Будь-яка допомога була б чудовою.
Я хотів би створити контрольний список md5 для всіх файлів у каталозі.
Я хочу cat filename | md5sum > ouptput.txt
. Я хочу зробити це в 1 крок для всіх файлів у моєму каталозі.
Будь-яка допомога була б чудовою.
Відповіді:
Ви можете пропустити md5sum
декілька назви файлів або bash розширень:
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
Якщо ви хочете пофантазувати, ви можете використовувати такі речі, як find
свердління та фільтрування файлів, а також робота рекурсивно:
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
файлів всередині підкаталогів, вищезгадане md5sum *
випромінювання переходить у рівень підкаталогів, кажучи ... - це каталог
find -type f -exec md5sum '{}' +
і `find -type f -exec md5sum '{}'` Мені вдалося його отримати. Дякую :)
openssl md5 * > checklist.txt
**
рекурсивно (наприклад, zsh), це ще простіше:md5sum **/* 2>/dev/null
Чудова програма для створення / перевірки контрольної суми - це rhash. Він створює навіть файли, сумісні з SFV, і перевіряє їх.
Він підтримує md4, md5, sha1, sha512, crc32 та багато інших.
Крім того, він може робити рекурсивне створення (-r варіант), наприклад, md5deep або sha1deep.
Не в останню чергу ви можете відформатувати вихід файлу контрольної суми; наприклад:
rhash --md5 -p '%h,%p\n' -r /home/
виводить файл CSV, включаючи повний шлях файлів, рекурсивно починаючи з /home
каталогу.
Я вважаю надзвичайно корисним навіть варіант -e перейменувати файли, вставляючи crc32 суму в ім'я.
Ви можете змінити "md5sum" на "rhash" у прикладах PhoenixNL72.
Ось ще два обширні приклади:
Створіть файл md5 у кожному каталозі, у якого його ще немає, з абсолютними шляхами:
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
Створіть файл md5 у кожній папці, яка ще не має жодної: немає шляхів, лише імена файлів:
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
Відмінність від 1 до 2 - це спосіб подання файлів у отриманому файлі md5.
Команди виконують наступне:
Вихід з цього всього сценарію можна перенаправити у файл (.....; done> test.log) або перенести на іншу програму (наприклад, grep). Вихід тільки покаже вам, які каталоги пропущені та які були оброблені.
Після успішного запуску ви отримаєте файл @ md5Sum.md5 у кожному підкаталозі поточного каталогу
Я назвав файл @ md5Sum.md5, тому він буде вказаний у верхній частині каталогу у розділі samba.
Перевірку всіх файлів @ md5Sum.md5 можна виконати наступними командами:
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
Після цього ви можете скопіювати checklog.txt за допомогою grep -v ОК, щоб отримати список усіх файлів, які відрізняються.
Щоб відновити @ md5Sum.md5 у певному каталозі, коли ви змінили або додали файли, наприклад, видаліть файл @ md5Sum.md5 або перейменуйте його та запустіть команду generation знову.
Я потрапив у цю проблему, і хоча рішення вище є елегантними, я хотів швидко і брудно зламати цю ситуацію: 1 каталог, з підкаталогами на одному рівні глибоко всередині нього.
Отже, введіть каталог в оболонку і запустіть:
md5sum * */* 2>/dev/null > md5sum.md5
Це отримує всі файли в каталозі верхнього рівня, видаляє попередження про помилку про те, що підкаталоги є каталогами, а потім запускає md5sums на вміст підкаталогу. Перевага: легко запам'ятовується, робить саме те, що має робити. Мене завжди бентежить пошук синтаксису, і я ніколи не можу його запам'ятати вгорі голови, тому немає необхідності в циклі і т.д., маючи справу з пробілами в назвах каталогів, цей один вкладиш спрацював чудово. Не надійне потужне рішення, не корисне для> 1 рівня підкаталогів, але швидке та просте вирішення проблеми.