tar виходить на "Не можу статистика: Немає такого файлу каталогу", чому?


50

Я намагаюся створити файл tar.gz за допомогою наступної команди:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

Потім він починає створювати файли (багато файлів у папці), але тоді я отримую таку помилку:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

Я не бачу опису цієї помилки, що це означає?

Відповіді:


61

Видалити -з vcfzопцій. tarне потребує дефісів для опцій.

З дефісом аргумент для -fваріанту є z. Таким чином, команда фактично намагається архівувати dvr_rdk_v1.tar.gzі dvr_rdkв архів називається z. Без дефісу семантика параметрів змінюється, так що наступний аргумент у командному рядку, тобто ім'я файлу вашого архіву, стає аргументом fпрапора.

Також перевірте свій дозвіл на запис до каталогу, з якого ви виконуєте команду.


6
Йому не потрібні дефіси, але вони не повинні бути проблемою, вони просто необов’язкові
Michael Mrozek

18
@MichaelMrozek Насправді, видалення -дійсно має значення, оскільки гуркіт GNU є химерним. Аргументи опції не можуть бути об'єднані в перший аргумент, коли він не починається з a -, тому аргумент до f- це наступний аргумент tar, і тому tar vcfz dvr_rdk_v1.tar.gzеквівалентний tar -v -c -f dvr_rdk_v1.tar.gz -z.
Жил "ТАК - перестань бути злим"

1
Я також зрозумів, якщо я видаляю zабо jстискання архіву є успішним навіть із -залученими. Коли я додаю дефіс включений, він розглядає останній символ у варіанті як "файл". Отже, в результаті я отримую jабо zяк архівований файл, якщо використовую цю опцію -cvfzабо -cvfj.
JohnnyQ

9
Підсумок: якщо 'f' виникає як опція в будь-якому іншому місці, ніж останній варіант, команда не буде виконувати те, що було призначено. Я не бачу, як Gnu не міг додати попередження, коли вони виявляють таку серйозну та легко розпізнавальну проблему. Я щойно витратив 40 хвилин, намагаючись налагодити цю дивацтво. Цей, мабуть, витратив сотні тисяч продуктивності людини.
smci

57

-fПараметр повинен безпосередньо передувати ім'я файлу. Отже, використовуйте tar -vczf filename.tar.gzзамість-vcfz


Так, це пояснює, чому команда, яку я використовую, намагається створити стислий архівний файл, який називається, jабо за zдопомогою цих команд -cvfjі -cvfzвідповідно.
JohnnyQ

17

Команда tar на історичному рівні була однією з небагатьох команд, яка не відповідає правилам синтаксису утиліти Unix .

Сторінка стандартів для дьогтю говорить:

f
Використовуйте перший операнд файлу (або другий, якщо b вже вказано) як ім'я архіву замість системи, що залежить від системи за замовчуванням

Хоча вказівки щодо синтаксису включають таке:

Настанова 5:
Один або кілька варіантів без аргументів параметра, за якими слід щонайменше один варіант, який приймає параметр-аргумент, слід приймати, якщо згрупувати його за один роздільник.

Отже, хоча команда, яку ви ввели, tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/буде добре в старих версіях tar, певні версії tar, написані для чіткого дотримання синтаксичних інструкцій утиліти, розберуть це, означаючи "використовувати zяк аргумент файлу для -f". Тож вам слід скористатись наступним для переносу:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

Для створення архіву

$ tar -cvf music.tar Music/

Тут відображається список файлів і папок

$ tar -tvf music.tar         

І витягти знову

$ tar -xvf music.tar         

Це насправді не пояснює його помилки, правда? Це лише пояснення використання tar.
Бернхард

1
@Bernhard Ну, його помилка полягала в тому, що він tarнеправильно використовував , хоча приємно хоча б згадати, у чому полягає ключова різниця (рухається -fдо кінця)
Майкл Мрозек

2
@MichaelMrozek Добре, що він швидше залишив, zніж поставив fврешті-решт, звідси мій коментар.
Бернхард

Ця команда, що працює для ubuntu, Успіх
dhamu

ГАРАЗД! Вибачте, я не слухаю ваше запитання, але команда, що працює для ubuntu.
дхаму
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.