По умолчанию для многих видов ошибок tar
выводит сообщение в stderr, а затем продолжает работу — ошибки, которые он называет «устранимыми», обычно это ошибки, которые относятся к одному файлу или члену архива, например, проблемы с правами доступа.
Иногда такое поведение действительно неприятно. Например, если я распаковываю архив, а диск заполнен, то я могу получить что-то вроде этого:
tar: python-lib/PyML/classifiers/ext/_cgist.so: Wrote only 2048 of 10240 bytes
tar: python-lib/PyML/classifiers/ext/_csmo.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_csvmodel.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_knn.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_libsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/_mylibsvm.so: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/cgist.py: Cannot write: No space left on device
tar: python-lib/PyML/classifiers/ext/csmo.py: Cannot write: No space left on device
это может продолжаться тысячи строк в большом архиве. Если это происходит в скрипте, я бы предпочел tar
просто выйти немедленно, чтобы я мог выдать пользователю сообщение об ошибке.
Есть ли способ принудительно tar
завершить работу при первой же ошибке? Я не вижу ее в сканировании tar --help
. Любой разумный рецепт сценария-обертки для достижения этой цели также будет принят с благодарностью.
решение1
Один из способов — перенаправить стандартный вывод ошибок /dev/full
, например:
tar ... 2>/dev/full
Это приведет к сбою tar при попытке вывести предупреждающее сообщение в stderr
.