Сравнить папку с tarball

Сравнить папку с tarball

У меня такая структура каталогов

Code
├── cse701.tgz
└── cse701
    ├── cse701.md
    ├── CSE701.md
    ├── CSE701_pandoc.md
    ├── cse701.pdf
    ├── cse.pdf
    ├── default.yaml
    ├── html2tex.log
    ├── test.md
    └── missing.md

А структура tar-архива выглядит так:

drwxrwxr-x zenith/zenith     0 2020-12-02 20:18 cse701/
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/default.yaml
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701_pandoc.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/html2tex.log
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/test.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.md
tar --diff -zf cse701.tgz  cse701/
tar --compare -zf cse701.tgz  ./cse701/

Параметры сравнения и сравнения, как показано на рисункеэта почтаследует отметить, что на диске отсутствует файл, которого нет в tarball.

Однакоgnu tar документыговорит, что он покажет, были ли файлы изменены, но проигнорирует файлы в файловой системе, которые не имеют соответствующих членов в архиве. Если файл представлен в архиве, но не существует в файловой системе, tar сообщает о различии.

Так как же мне узнать, были ли добавлены какие-либо новые файлы в папку после создания tarball?

решение1

Это не однострочный код, но он делает то, что вам нужно:

cd /path/to/Code
tar -tf cse701.tgz | sed 's#/$##' >tgz
find cse701 >fs
diff -uw fs tgz
rm fs
rm tgz

Объяснение:

  • Сначала переходим в соответствующий каталог
  • Затем мы перечисляем содержимое tar.gz, удаляя /es в конце строки ( tar -tони помещаются туда для каталогов)
  • Затем мы находим все файлы и каталоги в соответствующем поддереве файловой системы ( findputsнет /ес в конце)
  • Мы сравниваем эти два списка
  • и убирать

Связанный контент