Допустим, у меня есть папка 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
Механизм предназначен только для работы с начальными / конечными косыми чертами. Возможно, вы можете использовать более сжатые методы, чтобы убрать оскорбительные косые черты, но приведенный выше пример должен работать.