Сравнение файлов и их свойств

Каждый день я получаю информацию о определенном наборе файлов в моей почте, которая выглядит так:

58623208 Sep 14 20:08 blbn_blfbe_drv 57904920 Sep 14 19:54 blbn_cycmn 55814208 Sep 14 06:02 clsa_Upd 38912000 Sep 14 19:12 cs_chgpp 41107456 Sep 14 19:17 csmRFbe 39403520 Sep 14 19:09 csmUAddAct 39235584 Sep 14 19:20 csmUAddSub 

… и так далее, около 60 файлов.

  • Как использовать grep для исходного кода без комментариев
  • Расширение имени файла для печати с помощью -exec в поиске
  • Могут ли удаленные пакеты Debian иметь оставшиеся файлы?
  • Стандартный unix используется для разделения «foo.bar.baz» на «foo.bar» + «.baz»?
  • Как применять рекурсивные каталоги chmod без влияния на файлы?
  • diff gzipped tarball против каталога?
  • Теперь мне нужно сравнить все эти файлы один за другим с существующими файлами, чтобы убедиться, что все файлы найдены соответствующими.

    filename , timestamp , date и size – это должно быть совпадение.

    Есть ли способ автоматизировать его?

    Я думал об использовании comm или diff .

  • Ошибка при использовании stat, errno = 2
  • Ожидание двух событий
  • Найти входящие символические ссылки
  • Установите дату создания файла в дату его изменения на OSX
  • Как сохранить изменения в моем vim-буфере в качестве файла патча?
  • запуск сценария с помощью ". "И с" источником "
  • 2 Solutions collect form web for “Сравнение файлов и их свойств”

    Я предполагаю, что у вас есть дата GNU, с опцией -d :

     while read size mon day time filename; do if [[ ! -f "$filename" ]]; then echo "ERROR: no such file: $filename" >&2 else filesize=$(stat -c %s "$filename") if [[ "$size" != "$filesize" ]]; then echo "ERROR: size mismatch: $filename" >&2 else filetime=$(date -d "$(stat -c %y "$filename")" "+%b %d %H:%M") if [[ "$mon $day $time" != "$filetime" ]]; then echo "ERROR: date mismatch: $filename" >&2 fi fi fi done 

    Предполагая, что все новые файлы находятся в (или могут быть перемещены) новыми /, а все старые файлы находятся в старых / каталогах, вы можете использовать «diff -ur old / new /», чтобы увидеть различия между файлами между каталогами.

    Если вы не заботитесь о природе различий, только тот факт, что некоторые файлы отличаются друг от друга, используйте grep для фильтрации вывода, но вы потеряете код выхода из diff (1 = найденные различия). Вместо этого вы можете использовать код выхода из grep (1 = не найдено совпадений regexp, которые вы можете интерпретировать как означающие, что все файлы одинаковы).

    например, я сгенерировал некоторые текстовые файлы в старых и новых (просто мусор, содержащий списки каталогов / bin, / sbin и / etc). затем я отредактировал новый / baz и удалил несколько строк:

     $ ls -l new old new: total 28 -rw-r--r-- 1 cas cas 11063 Sep 15 15:27 baz -rw-r--r-- 1 cas cas 14529 Sep 15 15:25 foo old: total 20 -rw-r--r-- 1 cas cas 6843 Sep 15 15:24 bar -rw-r--r-- 1 cas cas 12025 Sep 15 15:24 baz 

    во-первых, сравните два каталога:

     $ diff -ur old new | egrep '^(Only|diff)' Only in old: bar diff -ur old/baz new/baz Only in new: foo $ echo $? 0 

    здесь вы можете увидеть код выхода, когда src и dst dir одинаковы (или имеют точно такой же контент)

     $ diff -ur old old | egrep '^(Only|diff)' $ echo $? 1 

    вы также можете использовать cmp, но он может соответствовать только отдельным файлам, он не может рекурсивно проверять два каталога для различий. вам нужно будет написать обертку для цикла цикла, и вам придется принимать во внимание файлы, которые существуют только в новом, но не в старом. более простой в использовании diff.

    Linux и Unix - лучшая ОС в мире.