Tarballing без метаданных Мерзавца

Мое исходное дерево содержит несколько каталогов, которые используют управление исходным кодом Мерзавца, и мне нужно к tarball целое дерево, исключая любые ссылки на метаданные Мерзавца или пользовательские файлы журнала.

Я думал, что буду делать попытку с помощью комбинации find/egrep/xargs/tar, но так или иначе файл tar содержит .git каталоги и *.log файлы.

Это - то, что я имею:

find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar

Кто-то может объяснить мое недоразумение здесь? Почему tar обрабатывает файлы, которые находят, и egrep фильтруют?

Я открыт для других методов также.

49
задан Peter Mortensen 5 August 2017 в 15:43
поделиться

5 ответов

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

GNU tar имеет параметр --exclude, который решает эту проблему:

tar cvf ~/app.tar --exclude .git --exclude "*.log" .
95
ответ дан 7 November 2019 в 11:14
поделиться

Попробуйте что-то вроде этого:

git archive --format=tar -o ~/tarball.tar -v HEAD

Добавьте файлы .log и все остальное, что вы не хотите упаковывать, в файл .gitignore.

12
ответ дан 7 November 2019 в 11:14
поделиться

[пощечина] Ба! Параметры, которые нужно было найти, были в неправильном порядке! Предупреждений я не видел, потому что они свистели с экрана. Это позволило '.' пройти через egrep, из-за которого смола все проглотила.

Это научит меня заглушать важные сообщения при подробной отладке.

Это работает:

find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
4
ответ дан 7 November 2019 в 11:14
поделиться

git-archive может быть тем, что вы ищете.

2
ответ дан 7 November 2019 в 11:14
поделиться

Вы можете сделать это без grep. найти мощный

 find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
2
ответ дан 7 November 2019 в 11:14
поделиться
Другие вопросы по тегам:

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