tar cvf или tar-cvf?

Попробовать sudo -K удалить метку времени. Также взгляните на каталог меток времени (/var/run/sudo в debian системах), возможно, что-то пошло не так, как надо там.

24
06.01.2012, 01:08
3 ответа

tar одна из тех древних команд со дней, когда синтаксис опции не был стандартизирован. Поскольку все полезные вызовы tar потребуйте определения операции прежде, чем обеспечить любое имя файла, большинство tar реализации интерпретируют свой первый аргумент как опцию, даже если он не начинается с a -. Актуальнейшие реализации принимают a -; единственным исключением, о котором я знаю, является Minix.

Более старые версии POSIX и Единственного Unix включали a tar команда без - перед операционным спецификатором. Единственный Unix v2 имел оба традиционных archivers cpio и tar, но очень немного флагов могли быть стандартизированы, потому что существующие реализации слишком отличались, таким образом, стандарты представили новую команду, pax, который является единственным стандартом archiver в начиная с Единственного Unix v3. Если Вы хотите стандартное соответствие, использовать pax, но остерегайтесь этого, много дистрибутивов Linux не включают его в свою основную установку, и существует нет pax в Minix. Если Вы хотите мобильность на практике, использовать tar cf filename.tar.

27
27.01.2020, 19:41
  • 1
  • 2
    Также обратите внимание на это, если дистрибутив Linux содержит pax, это обычно идет с худшей известной реализацией мира (мир GNU), которого нужно избежать из-за многих ошибок. –  schily 09.09.2015, 23:28
  • 3
    Кроме того, ps команда имеет то же поведение, можно опустить - для опций. –  perror 09.09.2015, 23:37
  • 4
    @perror Это неправильно. Много версий ps не позволяйте Вам опустить -. Версия Linux имеет опции с и без -, но большинство имеет различные значения (BSD по сравнению с совместимостью System V). –  Gilles 'SO- stop being evil' 09.09.2015, 23:45
  • 5
    Это верно, что большую часть времени я только использую ps aux... Так, я мог бы быть (частично) неправым.Прошу прощения. –  perror 09.09.2015, 23:47

Я могу быть динозавром, но я думаю, что обычно использование "cvf" вместо "-cvf" является, вероятно, более портативным. Я предполагаю, что большинство дистрибутивов Linux использует tar GNU, и я предположил бы, что *BSDs делают также, но Вы найдете собственные Unixes, которые все еще используют старый tar SysV, который раньше требовал, чтобы Вы не использовали '-' в опциях.

Я не использую "-cvf" (или "-xf" или безотносительно), и я не испытываю затруднений даже из-за новейшего Arch Linux.

И так же, как примечание стороны, я думаю, что можно использовать стандартные Sun опции команды "банки" с или без '-' также.

13
27.01.2020, 19:41
  • 1
    справки скорости, который я согласовываю с Вашим ответом, даже если информационная страница tar (который очень соглашается с тремя стилями определения опций) говорит, что старые опции сохранены только для совместимости и существует набор опций, которые не имеют НИКАКОЙ старой корреспонденции. –  David Costa 06.01.2012, 01:28
  • 2
    Вы неправы: tar на AT&T, которая UNIX был записан, чтобы не иметь - но он принимает - и пропускает его. Единственный портативный способ назвать tar состоит в том, чтобы назвать его без - и если Вы когда-нибудь находите реализацию "tar", которая не принимает вещи без - это не tar. –  schily 09.09.2015, 23:30

FWIW, я всегда использовал следующее:

tar -cpf - <source path> | ssh user@destserver "cd /; tar xf -"

Суть этого метода в том, что он будет поддерживать права доступа к файлам/папкам между машинами (при условии, что на обоих компьютерах существуют одни и те же пользователи/группы) (Также обычно я делаю это для копирования образов виртуальных дисков, так как для обработки разреженных файлов я могу использовать параметр -S.)

Просто протестировал это между двумя занятыми серверами и управляемыми ~ 14 ГБ в 216. (около 64MB/s) - может быть лучше между выделенными машинами и/или сжатием... YMMV

$ date; tar -cpf - Installers | ssh elvis "cd /home/elvis/tst; tar xf -"; date
Wed Sep  9 15:23:37 EDT 2015
Wed Sep  9 15:27:13 EDT 2015

$ du -s Installers
14211072   Installers
-121--3172-

Попробуйте:

cd /home/aryan
tar cfvz /dev/stdout . |
    ssh root@remoteserver 'cat > file.tar.gz && tar zxvf file.tar.gz'

Вам просто нужно немного адаптировать его

Примечание

/dev/stdout можно заменить на - .

Основным способом создания сжатых файлов с использованием tar является tar opts file.ext dir/. Здесь мы явно заменяем целевое имя файла на STDOUT , чтобы иметь возможность передавать его через ssh.

-121--246801-

В UNIX было несколько программ, которые не соответствуют текущему стандарту опций.

Один из них - dd , но dd был получен из мейнфрейма IBM DDR (Disk Dump and Restore).

Один из них - ar , а другой - tar . По моей информации, смола хотела быть похожей на ар.

Все реализации смол работают без - и никакая полезная реализация не требует -. Поэтому, если вы хотите писать переносные сценарии, проверьте стандарт SUSv2 и используйте только командную строку, совместимую с SUSv2.

3
27.01.2020, 19:41

Теги

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