У меня такая структура каталогов
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
они помещаются туда для каталогов) - Затем мы находим все файлы и каталоги в соответствующем поддереве файловой системы (
find
putsнет/
ес в конце) - Мы сравниваем эти два списка
- и убирать