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

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

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 файлов.

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

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

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

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

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.

  • Как я могу настроить $ PROMPT_COMMAND без перезаписи по умолчанию (если есть)?
  • Множественный оператор, который включает специальные символы, используя при возникновении ошибок
  • Как выполнять команды, последовательно эмулируя пользователя на терминале с помощью сценария оболочки
  • Почему моя команда mac terminal НЕ работает в сценарии оболочки?
  • Как применить одно и то же действие awk к различным файлам?
  • о выполнении программы python в скрипте оболочки, который запланирован на crontab
  • Как использовать и / или условно в сценарии оболочки
  • Как сделать аргумент cd аргументов нечувствительным?
  • Как избежать отправки EOF из запроса на разбор скриптов и отправки ответов на netcat
  • Как искать и извлекать строку из вывода команды?
  • Создание каталога с пробелом в имени
  • Interesting Posts

    Сколько контрольных точек в RHEL / CentOS убедитесь, что ни у кого нет доступа sudo / root

    Диспетчер файлов, показывающий скорость передачи битов для mp3-файлов

    Начать процесс root при загрузке?

    Alsamixer не работает без звука

    Выполнение двух анимаций бок о бок с помощью ImageMagick

    Как правильно установить Apache, MySQL и PHP на Ubuntu 10.4

    Как приостановить перечисление длинного текстового файла с кошкой в ​​командной строке после 10 строк, затем нажмите любую клавишу

    Изменяется ли местоположение таблицы разделов (GPT) при переходе с USB3 на SATA?

    tmux с iterm2 присоединяет удаленный сеанс

    Интеграция Tmux ranger: открытие текстовых файлов в новых панелях

    Как просмотреть информацию о экране в верхней части терминала?

    Как установить gimp 2.8 на Debian Squeeze?

    gvim цвета то же самое, что и терминал

    Не удается запустить Oracle после установки

    Динамическое изменение пароля root root каждый день

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