Вы использовали абсолютный или относительный путь? Должен быть относительным, кроме того, что выглядит правильно. Как долго вы позволяете ему работать, и насколько хороша ваша система? На быстрой машине это займет не менее нескольких минут. Потенциально час или больше? Сейчас я провожу тест.
Кевин
Да, это закончилось через ~ 1 час, но абсолютный путь был неправильным, вы были правы.
Гарретт Холл
5
В Linux, вы можете посмотреть , как далеко в архив tarнаходится с cat /proc/$(pidof tar)/fdinfo/0(адаптировать команду , если у вас есть более чем один tarпроцесс запущен).
Жиль
Важной частью также не является косая черта. Использование folder/folder2/не будет работать.
Marki555
Ответы:
145
tarсохраняет относительные пути по умолчанию . GNU tar даже говорит, что если вы попытаетесь сохранить абсолютный путь:
tar -cf foo.tar /home/foo
tar:Removing leading `/' from member names
Если вам нужно извлечь конкретную папку, посмотрите, что находится в файле tar:
tar -tvf foo.tar
И обратите внимание на точное имя файла. В случае моего foo.tarфайла я мог извлечь /home/foo/bar, сказав:
tar -xvf foo.tar home/foo/bar # Note: no leading slash
Так что нет, то, как вы разместили (не обязательно) правильный способ сделать это. Вы должны опустить ведущий слеш. Если вы хотите смоделировать абсолютные пути, сделайте это cd /сначала и убедитесь, что вы являетесь суперпользователем. Кроме того, это делает то же самое:
tar -C /-xvf foo.tar home/foo/bar # -C is the ‘change directory’ option
Есть очень очевидные, веские причины, почему tarпреобразует пути в относительные. Одним из них является возможность восстановить архив в местах, отличных от его исходного источника. Другой - это безопасность. Вы можете извлечь архив, ожидать, что его файлы появятся в вашем текущем рабочем каталоге, и вместо этого переписать системные файлы (или вашу собственную работу) в другом месте по ошибке.
Примечание: если вы используете эту -Pопцию, tarбудут заархивированы абсолютные пути. Поэтому всегда стоит проверить содержимое больших архивов перед извлечением.
--strip-components=Nможет быть полезным для некоторых здесь.
Acumenus
2
в моем случае нужно было писать ./foldername/вместо foldername, я думаю, это было потому, что когда я создавал смолу, я создал ее tar -cvf santi.tar ./*и когда «перечислял» смолу, это то, что он сказалdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
santiago arizti
1
А про .gz?
Питер Краусс
1
@PeterKrauss изменяется -xvfна -xzvf(добавляя -zопцию) и, очевидно, foo.tarна foo.tar.gzваш архив или как его там. То же самое верно для -j(bz2) и для некоторых последних версий -J(xz). Иначе конвейер вроде zcat foo.tar.gz | tar -xvf - …тоже работает.
Алексиос
И помните, если вы устали от многословного вывода во время извлечения, просто пропустите vвсе примеры. Например, tar -tf foo.tarи tar -xf foo.tar ....
tar
находится сcat /proc/$(pidof tar)/fdinfo/0
(адаптировать команду , если у вас есть более чем одинtar
процесс запущен).folder/folder2/
не будет работать.Ответы:
tar
сохраняет относительные пути по умолчанию . GNU tar даже говорит, что если вы попытаетесь сохранить абсолютный путь:Если вам нужно извлечь конкретную папку, посмотрите, что находится в файле tar:
И обратите внимание на точное имя файла. В случае моего
foo.tar
файла я мог извлечь/home/foo/bar
, сказав:Так что нет, то, как вы разместили (не обязательно) правильный способ сделать это. Вы должны опустить ведущий слеш. Если вы хотите смоделировать абсолютные пути, сделайте это
cd /
сначала и убедитесь, что вы являетесь суперпользователем. Кроме того, это делает то же самое:Есть очень очевидные, веские причины, почему
tar
преобразует пути в относительные. Одним из них является возможность восстановить архив в местах, отличных от его исходного источника. Другой - это безопасность. Вы можете извлечь архив, ожидать, что его файлы появятся в вашем текущем рабочем каталоге, и вместо этого переписать системные файлы (или вашу собственную работу) в другом месте по ошибке.Примечание: если вы используете эту
-P
опцию,tar
будут заархивированы абсолютные пути. Поэтому всегда стоит проверить содержимое больших архивов перед извлечением.источник
--strip-components=N
может быть полезным для некоторых здесь../foldername/
вместоfoldername
, я думаю, это было потому, что когда я создавал смолу, я создал ееtar -cvf santi.tar ./*
и когда «перечислял» смолу, это то, что он сказалdrwxr-xr-x santi/santi 0 2016-04-11 09:42 ./foldername/
.gz
?-xvf
на-xzvf
(добавляя-z
опцию) и, очевидно,foo.tar
наfoo.tar.gz
ваш архив или как его там. То же самое верно для-j
(bz2) и для некоторых последних версий-J
(xz). Иначе конвейер вродеzcat foo.tar.gz | tar -xvf - …
тоже работает.v
все примеры. Например,tar -tf foo.tar
иtar -xf foo.tar ...
.