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

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

tar -czf myfile.tar.gz myfile.txt
2
задан 22 April 2017 в 06:29

9 ответов

Чтобы получить несжатый размер 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

Чтобы иметь сжатый размер файла, несжатый размер и коэффициент сжатия.

2
ответ дан 22 May 2018 в 23:21

Чтобы получить несжатый размер 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

Чтобы иметь сжатый размер файла, несжатый размер и коэффициент сжатия.

2
ответ дан 18 July 2018 в 14:29

Чтобы получить несжатый размер 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

Чтобы иметь сжатый размер файла, несжатый размер и коэффициент сжатия.

2
ответ дан 24 July 2018 в 20:24

Вы можете указать содержимое (включая исходные размеры файла) файла 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-файла, который хранит все метаданные файлов.

1
ответ дан 22 May 2018 в 23:21
  • 1
    почему нам не нужен «z», в команде. Когда-то было необходимо указать, что gz следует отключить. «tar -tzvf fn.tar.gz», где t = test, z = unzip, v = verbose, f = имя файла. – pauljohn32 22 April 2017 в 07:27
  • 2
    Эта команда фактически распаковывает архив в эфире. – Ravexina 22 April 2017 в 07:57
  • 3
    @ pauljohn32: tar достаточно умен, чтобы определить формат, вам нужно только при создании архива. См. gnu.org/software/tar/manual/tar.html#SEC136 – NZD 22 April 2017 в 08:13
  • 4
    @Ravexina: Это правильно, и это невозможно сделать иначе, потому что файл .tar содержит метаданные файла. – NZD 22 April 2017 в 08:28
  • 5
    @NZD, да, но я думаю, что OP ищет что-то, чтобы сделать это без разжатия файла;) – Ravexina 22 April 2017 в 08:39

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

сначала, что быстрее?

[ f1] [oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.335s user 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 real 0m46.669s user 0m44.347s sys 0m4.981s

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

tar -xvf : [ ! d4] [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 real 0m1.029s user 0m0.012s sys 0m0.063s

0
ответ дан 22 May 2018 в 23:21
  • 1
    Ответы, которые вы предоставляете, декомпрессируют tarball, в то время как OP запрашивает способ определить исходный размер файла, не делая этого. – dsstorefile1 9 March 2018 в 04:27
  • 2
    @dsstorefile Я забыл поставить время выполнения в последней команде, что показывает значительное сокращение. и вы можете видеть отмену декомпрессии с «тайм-аутом», команда – RaZieRSarE 12 March 2018 в 22:52

Вы можете указать содержимое (включая исходные размеры файла) файла 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-файла, который хранит все метаданные файлов.

1
ответ дан 18 July 2018 в 14:29

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

сначала, что быстрее?

[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.761s user 0m43.203s sys 0m5.185s [oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.335s user 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 real 0m46.669s user 0m44.347s sys 0m4.981s

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

tar -xvf : [ ! d4] [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 real 0m1.029s user 0m0.012s sys 0m0.063s

0
ответ дан 18 July 2018 в 14:29

Вы можете указать содержимое (включая исходные размеры файла) файла 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-файла, который хранит все метаданные файлов.

1
ответ дан 24 July 2018 в 20:24
  • 1
    почему нам не нужен «z», в команде. Когда-то было необходимо указать, что gz следует отключить. «tar -tzvf fn.tar.gz», где t = test, z = unzip, v = verbose, f = имя файла. – pauljohn32 22 April 2017 в 07:27
  • 2
    Эта команда фактически распаковывает архив в эфире. – Ravexina 22 April 2017 в 07:57
  • 3
    @ pauljohn32: tar достаточно умен, чтобы определить формат, вам нужно только при создании архива. См. [D0] gnu.org/software/tar/manual/tar.html#SEC136 – NZD 22 April 2017 в 08:13
  • 4
    @Ravexina: Это правильно, и это невозможно сделать иначе, потому что файл .tar содержит метаданные файла. – NZD 22 April 2017 в 08:28
  • 5
    @NZD, да, но я думаю, что OP ищет способ сделать это, не разжав файл;) – Ravexina 22 April 2017 в 08:39

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

сначала, что быстрее?

[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.761s user 0m43.203s sys 0m5.185s [oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.335s user 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 real 0m46.669s user 0m44.347s sys 0m4.981s

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

tar -xvf : [ ! d4] [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 real 0m1.029s user 0m0.012s sys 0m0.063s

0
ответ дан 24 July 2018 в 20:24
  • 1
    Ответы, которые вы предоставляете, декомпрессируют tarball, в то время как OP запрашивает способ определить исходный размер файла, не делая этого. – dsstorefile1 9 March 2018 в 04:27
  • 2
    @dsstorefile Я забыл поставить время выполнения в последней команде, что показывает значительное сокращение. и вы можете видеть отмену декомпрессии с «тайм-аутом», команда – RaZieRSarE 12 March 2018 в 22:52

Другие вопросы по тегам:

Похожие вопросы: