Как получить размер файла (исходный размер файла) в.tar.gz без его распаковки?

Я делаю myfile.txt в zip-файл с помощью команды ниже, есть ли способ получить оригинальный размер файла "myfile.txt", не разархивируя его.

tar -czf myfile.tar.gz myfile.txt

3 ответа

Решение

Чтобы получить несжатый размер ZIP-файла, мы можем запустить gzip с опцией --list или же -l

gzip -l mytext.txt.tar.gz

Это даст вывод, похожий на этот

gzip -l mytext.txt.tar.gz
         compressed        uncompressed  ratio uncompressed_name
               1475                4608  68.4% mytext.txt.tar

Иметь размер сжатого файла, размер несжатого и степень сжатия.

Вы можете перечислить содержимое (включая исходные размеры файла) файла tar, используя:

tar -vtf myfile.tar.gz

Если вы только хотите myfile.txt:

tar -vtf myfile.tar.gz myfile.txt

Это работает, только если вы добавляете полный путь к файлу, в противном случае используйте:

tar -vtf myfile.tar.gz | grep myfile.txt

Обратите внимание, что tar должен распаковать архив, чтобы получить информацию о файле. Это, однако, будет скрывать это от вас.

Если вам особенно нужен способ получить метаданные файла без распаковки всего архива, лучше использовать zip для хранения ваших файлов и каталогов. Zip использует "центральный каталог" в конце zip-файла, в котором хранятся все метаданные файла.

Я нахожу все сайты в Интернете и не решаю эту проблему, получая размер, когда размер файла больше 4 ГБ.

во-первых, что быстрее?

[oracle @ base tmp] $ time zcat oracle.20180303.030001.dmp.tar.gz | туалет
    6667028480

    реальный 0m45.761s
    пользователь 0m43.203s
    sys 0m5.185s
[oracle @ base tmp] $ time gzip -dc oracle.20180303.030001.dmp.tar.gz | туалет
    6667028480

    реальный 0m45.335s
    пользователь 0m42.781s
    sys 0m5.153s
[oracle @ base tmp] $ time tar -tvf oracle.20180303.030001.dmp.tar.gz
    -rw-r - r-- oracle/oinstall 111828 2018-03-03 03:05 oracle.20180303.030001.log
    -rw-r----- oracle/oinstall 6666911744 2018-03-03 03:05 oracle.20180303.030001.dmp

    реальный 0m46.669s
    пользователь 0m44.347s
    sys     0m4.981s

безусловно, tar -xvf является наиболее быстрым, но ¿как отменить выполнение после получения заголовка?

мое решение таково:

[oracle @ base tmp] $ time echo $ (timeout --signal = SIGINT 1s tar -tvf oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit:]] *' | awk '{sum + = $ 1} END {print sum}'
    6667023572

реальный 0m1.029s
пользователь 0m0.012s
sys     0m0.063s
Другие вопросы по тегам