tar: добавить все файлы и каталоги в текущий каталог, включая .svn и т. д. - PullRequest
71 голосов
/ 06 сентября 2010

Я пытаюсь tar.gz каталог и использовать

tar -czf workspace.tar.gz *

Полученный tar включает в себя каталоги .svn в подкаталогах, но НЕ в текущем каталоге (так как * раскрывается только в «видимые» файлы перед передачей в tar

Я пытался

tar -czf workspace.tar.gz . вместо этого, но тогда я получаю ошибку, потому что '.' изменилось при чтении:

tar: ./workspace.tar.gz: file changed as we read it

Есть ли хитрость, чтобы * соответствовал всем файлам (включая префикс с точкой) в каталоге?

(с использованием bash в Linux SLES-11 (2.6.27.19)

Ответы [ 15 ]

0 голосов
/ 02 апреля 2018

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

tar -cjf workspace.tar.gz -C <path_to_workspace> $(ls -A <path_to_workspace>)

Таким образом, нет необходимости исключать свой собственный файл tarfile.Как отмечалось в других комментариях, -A выведет список скрытых файлов.

0 голосов
/ 03 марта 2016

Проблема с большинством представленных здесь решений заключается в том, что tar содержит ./ в начале каждой записи.Таким образом, это приводит к наличию каталога . при его открытии через компрессор GUI.Итак, что я в итоге сделал:

ls -1A | xargs -d "\n" tar cfz my.tar.gz

Если у вас уже есть my.tar.gz в текущем каталоге, вы можете захотеть получить это:

Помните , что у xargs есть определенный предел (см. xargs --show-limits).Таким образом, это решение не будет работать, если вы пытаетесь создать пакет, который содержит много записей (каталогов и файлов) в каталоге, который вы пытаетесь скопировать.

0 голосов
/ 01 октября 2015

Если пространство на диске не является проблемой, это также может быть очень легко сделать:

mkdir backup
cp -r ./* backup
tar -zcvf backup.tar.gz ./backup
0 голосов
/ 23 мая 2013

Использование find, вероятно, самый простой способ:

find . -maxdepth 1 -exec tar zcvf workspace.tar.gz {} \+

find . -maxdepth 1 найдет все файлы / каталоги / символические ссылки / etc в текущем каталоге и выполнит команду, указанную -exec. {} в команде означает, что список файлов идет сюда , а \+ означает, что команда будет выполняться как:

tar zcvf workspace.tar.gz .file1 .file2 .dir3

вместо

tar zcvf workspace.tar.gz .file1
tar zcvf workspace.tar.gz .file2
tar zcvf workspace.tar.gz .dir3
0 голосов
/ 06 сентября 2010
tar -czf workspace.tar.gz .??* *

Указание .??* будет включать «точечные» файлы и каталоги, которые имеют по крайней мере 2 символа после точки.Недостатком является то, что он не будет включать файлы / каталоги с одним символом после точки, например .a, если они есть.

...