LINUX.ORG.RU
ФорумTalks

Почему у tar такие ключи?

 


0

1

Почему ключи у некоторых программ отличаются от стандартных? Приходится запоминать как исключения.

Например, архивил что-то tar-ом.

tar -cvfp arch.tar ~/foo/*

Архивил до половины, выдавая tar: Error exit delayed from previous errors

Сделал tar без - и все прошло как надо

tar cvfp arch.tar ~/foo/*

Хотя другие стали бы ругаться на неправильные ключи

Или chmod, chown обычно ключ рекурсивно -r, а в виде исключения нужно запоминать -R.

Это исторически так сложилось?



Последнее исправление: noiseme (всего исправлений: 2)

Можешь везде писать «гнусные» версии ключей через "--", если тебя это запутывает :)

Похоже на ответ на твой вопрос: http://stackoverflow.com/questions/8957222/are-there-standards-for-linux-comm... со ссылкой на «Искусство программирования для никсей» от ESRа, который и так хотел тебе посоветовать, если интересно «почему» да «как».

slackwarrior ★★★★★
()
Последнее исправление: slackwarrior (всего исправлений: 1)
Ответ на: комментарий от noiseme

Нужно весь вывод смотреть, а не только самый конец.

Error exit delayed from previous errors

Это сообщение означает, что ошибка произошла раньше, но tar не стал сразу завершать работу, а продолжил и заархивировал «всё, что смог». Обычно такая ситуация возникает, когда архивируемые файлы изменяются или удаляются кем-то ещё прямо во время работы tar'а.

Deleted
()
Ответ на: комментарий от noiseme

Покапитаню. Проблема была в том, что в команде

tar -cvfp arch.tar ~/foo/*

имя создаваемого архива — «p», а файл arch.tar должен быть в него помещён вместе с ~/foo/*. Т.к. файл arch.tar не существовал, tar по ходу дела написал на stderr что-то вроде

tar: arch.tar: Cannot stat: No such file or directory

и только в конце

tar: Error exit delayed from previous errors

А в команде

tar cvfp arch.tar ~/foo/*

имя создаваемого архива arch.tar и поэтому всё проходит гладко.

unterwulf
()
Ответ на: комментарий от Deleted

да, видел это объяснение, пока искал как заархивить, так а почему тогда без - сработало?

noiseme
() автор топика

Ты ещё спроси, почему у dd такие ключи. Ответ прост: этим утилитам больше лет, чем медиану возраста населения лора.

beastie ★★★★★
()
Ответ на: комментарий от unterwulf

с чего это имя создаваемого архива «p»? это ключ для сохранения владельца и прав у файлов. И почему тогда без - tar не ругается на неправильные ключи?

Как раз таки без - tar должен подумать что это не ключи, а имя создаваемого архива

noiseme
() автор топика
Ответ на: комментарий от snaf

ну да -R, а в других командах рекурсивно -r

noiseme
() автор топика
Ответ на: комментарий от beastie

так то оно и предполагалось, придется запоминать как есть или в manы лезть чуть что

noiseme
() автор топика
Ответ на: комментарий от noiseme

с чего это имя создаваемого архива «p»?

Имя архива следует сразу за ключём f:

tar zcvfp arch.tgz ...

 — архив «p»

tar zcvpf arch.tgz ...
 — архив «arch.tgz»

beastie ★★★★★
()

Тогда такие замки были, вот и ключи к ним такие придумали.

proud_anon ★★★★★
()
Ответ на: комментарий от TCHK
tar -zcvpfarch.tgz

 — да

tar zcvpfarch.tgz
 — нет
tar zcvpf arch.tgz
 — да
Почему так — не спрашивай. ☺

beastie ★★★★★
()
Ответ на: комментарий от beastie

чем медиану возраста населения лора

в последнее время эта цифра неуклонно уменьшается, скоро и systemd будет старше.

x0r ★★★★★
()
Ответ на: комментарий от beastie

На самом деле, по крайней мере в случае с GNU tar, всё не так просто. Если -f тогда имя архива идёт сразу за ключом (не принципиально слитно или отдельно), если же просто f тогда имя архива идёт в следующем за блоком опций слове (при условии отсутствия в блоке других опций требующих аргументов).

См. http://www.gnu.org/software/tar/manual/tar.html#SEC38

unterwulf
()
Ответ на: комментарий от noiseme

с чего это имя создаваемого архива «p»

С того, что так написано в мануале.

unterwulf
()
Ответ на: комментарий от x0r

Не путаешь ли ты медиану и среднее? ☺ Медиану я не зря выбрал. Хотя если подумать, то можно скорей всего и max значение брать. (по крайней мере для dd).

beastie ★★★★★
()

В первом случае у тебя ключи, и они работают как и везде: ожидают значение непосредственно после себя. Просто ты использовал сокращенную форму записи:

> tar -c -f p arch.tar foo/*

> tar -cf arch.tar -p foo/*

Во втором случае у тебя первым аргументом флаги, которые говорят тару, что делать и как интерпретировать последующие аргументы. Это историческое поведение:

> tar cfb arch.tar 16 foo/*

baka-kun ★★★★★
()
Последнее исправление: baka-kun (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.