Назад | Перейти на главную страницу

Как я могу проверить, содержит ли каталог те же файлы архива TAR?

Допустим, у меня есть папка Documents и файл TAR Documents.tar, как проверить, содержит ли tar-файл те же файлы, что и в каталоге?

Для меня более очевидным решением было бы:

$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs

К сожалению, это очень медленно для больших файлов TAR, есть ли другие альтернативы?

*Обновить: tar -dvf Documents.tar (или --diff, --compare) не работает, потому что он не обнаруживает файл, который присутствует в файловой системе, но не в файле TAR, он просто обнаруживает файл, присутствующий в файле TAR, но не в файловой системе например:

$ mkdir new
$ touch new/foo{1..4}
$ tar cvf new.tar new/
$ touch new/bar
$ tar --diff --verbose --file=new.tar       #### doesn't detect new/bar #########
$ rm new/foo1
$ tar --diff --verbose --file=new.tar

Вывод

new/
new/foo2
new/foo3
new/foo4
new/foo1
tar: new/foo1: Warning: Cannot stat: No such file or directory   ### works ###

Предположим, вы смолили /etc каталог, и теперь вы хотите сравнить список файлов tar с файловой системой в реальном времени. Вы можете использовать следующие команды для создания списка файлов, а затем diff два списка.

Чтобы создать список живых файловых систем:

find /etc | cut -c 2- | sort > fs.list

Чтобы вывести список файлов внутри tar:

tar -tf etc.tar.gz | sed 's//$//' | sort > tar.list

Наконец, сравните два списка с:

diff fs.list tar.list

Обратите внимание, что cut и sed Механизм предназначен только для работы с начальными / конечными косыми чертами. Возможно, вы можете использовать более сжатые методы, чтобы убрать оскорбительные косые черты, но приведенный выше пример должен работать.