Я використовую дьоготь GNU. Він може автоматично визначати тип стиснення при стисненні / розпакуванні файлів. Але мені потрібно розпакувати архів зі stdin, і тип компресу невідомий. Я помітив, що дьоготь може дати мені правильну пропозицію на кшталт:
tar: Archive is compressed. Use -z option
Але я хочу, щоб tar використовував цю опцію стиснення автоматично, не вимагаючи ввести цей аргумент. Як я можу це зробити? Чому б не смола просто розпакувати, оскільки вона вже знає тип стиснення?
Дякую!
tar
він не знає, який тип даних у нього є, stdin
поки він не прочитає їх, і тоді вже пізно зателефонувати в програму для скасування. Він підтримує gzip, bzip2 та інші. Усунути цю проблему непросто (доведеться буферувати дані), тому вона просто каже вам спробувати ще раз.
fork()
/ exec()
метод для передачі даних за допомогою утиліти без стискання. Утиліта буде читати з stdin
труби, і перші 4K тепер бракували б. Немає способу повернути дані назад у трубу після її читання.
cat buffer - | gunzip
. (Крім того, не блокуючи введення / виведення можна використовувати, щоб уникнути необхідності в додатковому процесі.)