{"id":283513,"date":"2017-03-19T16:46:39","date_gmt":"2017-03-19T13:46:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=283513"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=283513","title":{"rendered":"findNclean: \u043d\u0430\u0439\u0442\u0438 \u0438 \u0432\u044b\u0447\u0438\u0441\u0442\u0438\u0442\u044c"},"content":{"rendered":"<p><a href=\"https:\/\/habrahabr.ru\/post\/323828\/#\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f83\/b42\/91d\/f83b4291d39b406ca2a482f5732765a1.jpg\"\/><\/a><\/p>\n<p>  \u041d\u0435\u0442-\u043d\u0435\u0442, \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u0440\u043e \u0431\u043e\u043b\u044c \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0435! \u0414\u0430\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 ).<\/p>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0443\u044e <a href=\"https:\/\/github.com\/vmspike\/findNclean\">\u0443\u0442\u0438\u043b\u0438\u0442\u0443<\/a>, \u0441 \u043f\u044b\u043b\u0443 \u0441 \u0436\u0430\u0440\u0443 \u0438\u0437 \u043f\u043e\u0434 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u0421\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e (\u0445\u043e\u0442\u044c \u0438 \u0434\u043e \u0431\u043b\u0435\u0441\u043a\u0430 \u0431\u043b\u044f\u0445\u0438 \u043d\u043e\u0432\u043e\u0438\u0441\u043f\u0435\u0447\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043c\u0431\u0435\u043b\u044f \u0435\u0451 \u0435\u0449\u0451 \u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c), \u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0451 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u0432\u0430\u0442\u043e. \u041f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430 \u0435\u0451 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0431\u0430\u0448\u0438\u0437\u043c\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0430\u043c \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f. \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0438\u0442\u044c \u0434\u0432\u0443\u0445 \u0437\u0430\u0439\u0446\u0435\u0432 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0451 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0435\u0433\u043e\u0436\u0435 \u043c\u0443\u0447\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0451\u043f\u0430\u043d\u043d\u044b\u0445 \u0437\u0432\u0435\u0440\u0443\u0448\u0435\u043a, \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0445 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u0440\u0438\u0447\u0435\u0441\u0430\u0442\u044c. \u0422\u0440\u0435\u0442\u0438\u0439 \u0437\u0430\u044f\u0446 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043d\u0435 \u0437\u0430\u044f\u0446 \u0432\u043e\u0432\u0441\u0435, \u0430 \u0443\u0434\u0430\u0432) \u043c\u0443\u0434\u0440\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0451\u043b \u0432\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0431\u0430\u0440\u0434\u0430\u043a\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433, \u0442\u0435\u0431\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0445 \u043a\u0443\u0434\u0430-\u0442\u043e; \u0438\u043b\u0438 \u0442\u0435\u0431\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0439 \u043f\u044b\u043b\u0438 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0430\u043f\u0442\u0430\u0439\u043c\u043e\u043c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <s>\u0441\u043e\u0442\u0435\u043d<\/s> \u043b\u0435\u0442 \u0438 \u0442\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d bash; \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0438\u043c\u043e <abbr title=\"Brace Expansion: \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u043e\">\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b{,\u0430,\u043e}<\/abbr>, \u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438 \u043c\u0438\u043c\u043e!<a name=\"habracut\"><\/a><\/p>\n<p>  <a href=\"https:\/\/github.com\/vmspike\/findNclean\">findNclean<\/a> \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430 \u0431\u0430\u0437\u0435 \u0432\u0435\u043b\u0438\u043a\u043e\u0433\u043e \u0438 \u043c\u043e\u0433\u0443\u0447\u0435\u0433\u043e <code>find<\/code>, \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0432\u0435\u043b\u0438\u043a\u043e\u0433\u043e <code>mv<\/code>, \u0438 \u0432\u0441\u0451 \u044d\u0442\u043e \u0432 \u0441\u0443\u043f\u0435 \u0438\u0437 <code>bash<\/code>.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0451 \u043d\u0430 <code>python<\/code> \u0438 \u043d\u0435 \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u00ab\u0442\u043e\u043d\u043a\u043e\u0441\u0442\u044f\u043c\u0438\u00bb <code>bash<\/code>, \u043d\u043e \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u0431\u044b\u043b\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u044b\u0431\u043e\u0440\u0430, \u043f\u043b\u044e\u0441 \u0443 bash \u043f\u043e\u043b\u0443\u0447\u0448\u0435 \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f\u043c\u0438 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0442\u0435\u0431\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u0438 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043d\u0430 \u0432\u0438\u043d\u0435\u0433\u0440\u0435\u0442\u0435 \u0438\u0437 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u041a\u0442\u043e \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0435\u043d \u2014 \u043a\u0438\u043d\u044c\u0442\u0435 \u0432 \u043c\u0435\u043d\u044f\u2026 \u0447\u0435\u043c-\u043d\u0438\u0431\u0443\u0434\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e\u0431 \u043f\u0440\u043e\u043d\u044f\u043b\u043e :). \u041f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u0434 \u0441\u0442\u0430\u0440\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 CentOS 5. \u0417\u0430\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043e\u0441\u0435\u0439 (\u0442\u0438\u043f\u0430 Ubuntu 16.04): <code>find mv wc<\/code>, \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u044b\u0445 \u043f\u043b\u044e\u0441 <code>date touch<\/code>. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u0441\u0451 <s>\u0447\u0438\u0441\u0442\u044b\u0439<\/s> bash.<\/p>\n<h3>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u0448\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0433\u0434\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0448\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\/\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439\/\u0441\u0438\u043c\u043b\u0438\u043d\u043a\u043e\u0432. \u041a\u0430\u0436\u0434\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 <code>find<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432 \u0441\u0432\u043e\u0439 \u043b\u043e\u0433.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u0435\u043d \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435, \u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u0430\u043c \u0436\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0448\u044c \u043e\u043f\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0438\u0441\u043a\u0430. \u041e\u043d \u0441\u043e\u0437\u0434\u0430\u0441\u0442 csv-\u043b\u043e\u0433 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0448\u044c \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0442\u0443\u0434\u0430 \u043f\u043e\u043f\u0430\u043b\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u043e \u2014 \u0443\u0434\u0430\u043b\u044f\u0435\u0448\u044c \u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 \u0443\u043a\u0430\u0437\u0430\u043d \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>APPROVED_SUFFIX<\/code> (\u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0437 \u043d\u0435 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430), \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0448\u044c \u044d\u0442\u043e\u0442 \u0441\u0443\u0444\u0444\u0438\u043a\u0441 \u043a \u0438\u043c\u0435\u043d\u0430\u043c \u043b\u043e\u0433\u043e\u0432. \u041f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>APPROVED_SUFFIX<\/code> \u043f\u0443\u0441\u0442\u043e\u0439, \u0442.\u0435. \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/li>\n<li>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0448\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0430 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u2014 \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u043b\u043e\u0433 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043b\u043e\u0433 \u043a\u043e\u0433\u0434\u0430, \u0447\u0442\u043e, \u043a\u0443\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b.<\/li>\n<\/ul>\n<p>  \u0414\u043e \u0432\u0441\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u0441\u043e\u0432\u0441\u0435\u043c \u0431\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432: <code>.\/findNclean<\/code><br \/>  \u0421\u043e\u0441\u0442\u043e\u0438\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0438\u0437 <a href=\"https:\/\/github.com\/vmspike\/findNclean\/raw\/master\/findNclean\">\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e<\/a> \u0438 <a href=\"https:\/\/github.com\/vmspike\/findNclean\/raw\/master\/findNclean.conf.example\">\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e<\/a> \u0444\u0430\u0439\u043b\u043e\u0432. \u0412\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0432 \u0432\u044b\u0432\u043e\u0434\u0435 <code>.\/findNclean help -c<\/code><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0438\u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0433\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code># 100501\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0442\u044c \u0441\u0435\u0431\u0435 \u0432 \u043d\u043e\u0433\u0443 &lt;Rule - \u041d\u0430 \u0442\u0432\u043e\u0439 \u0441\u0442\u0440\u0430\u0445 \u0438 \u0440\u0438\u0441\u043a&gt;     result_list = \/tmp\/\u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435.csv     search_path = \/     type = file     move_path   = \/.Trash     move_log    = \/var\/log\/findNclean - Highway to hell (remix).csv &lt;\/Rule&gt; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0435\u0433\u043e \u0436\u0434\u0430\u0442\u044c \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<div class=\"spoiler\"><b class=\"spoiler_title\">.\/findNclean find -c .\/findNclean.conf.example 2&gt;&amp;1 | grep -v &#39;Permission denied&#39;<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>2017-03-13T02:04:02 10853 Start action: find 2017-03-13T02:04:02 10853 Config: .\/findNclean.conf.example 2017-03-13T02:04:02 10853 Debug mode enabled 2017-03-13T02:04:02 10853 Config rules count: 2 2017-03-13T02:04:02 10853 Relative paths allowed. Current dir: \/home\/user\/path\/to\/findNclean 2017-03-13T02:04:02 10853 Effective config content: &lt;Global&gt;     DEBUG = true     REL_PATH_ALLOW = true     APPROVED_SUFFIX = .approved &lt;\/Global&gt; &lt;Rule1  find\/move old unused *.tmp files in \/tmp, \/var and current user home dir&gt;     result_list = .\/ancient-tmp.find-example.csv     search_path = \/var\/     search_path = \/tmp\/     search_path = ~\/     type = f     name = .*\\.tmp     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-tmp.move-example.csv     move_log_err = .\/ancient-tmp.move-example.err.csv &lt;\/Rule1&gt; &lt;Rule2  The same as above but for small non-zero logs&gt;     result_list = .\/ancient-logs.find-example.csv     search_path = ~\/     search_path = \/var\/     search_path = \/tmp\/     type = f     name = .*\\.log(\\.gz)?     size &gt;  0     size &lt;= 2M     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-logs.move-example.csv     move_log_err = .\/ancient-logs.move-example.err.csv &lt;\/Rule2&gt; 2017-03-13T02:04:02 10853 All non-zero size existing result_list files will be preliminary backuped: 2017-03-13T02:04:02 10853 The following commands will be evaluated (you can copy-paste them to bash terminal as is):   find -P -O3 -- \/var\/ \/tmp\/ \/home\/user\/  -regextype posix-extended \\(  \\! -name \\*$'\\n'\\*   -type f -regex .\\*\/.\\*\\\\.tmp \\! -newerat 2017-01-01T00:00:00  -fprintf .\/ancient-tmp.find-example.csv %y\\;%s\\;%TY-%Tm-%TdT%TH:%TM:%TS\\;%AY-%Am-%AdT%AH:%AM:%AS\\;%u\\;%g\\;%p\\\\n \\) , \\(  \\! -name \\*$'\\n'\\*   -type f -regex .\\*\/.\\*\\\\.log\\(\\\\.gz\\)\\? -size +0c \\( -size -2097152c -o -size 2097152c \\) \\! -newerat 2017-01-01T00:00:00  -fprintf .\/ancient-logs.find-example.csv %y\\;%s\\;%TY-%Tm-%TdT%TH:%TM:%TS\\;%AY-%Am-%AdT%AH:%AM:%AS\\;%u\\;%g\\;%p\\\\n \\) 2017-03-13T02:04:02 10853 Wait for all background processes completion... 2017-03-13T02:04:06 10853 Completed in 4 sec 2017-03-13T02:04:06 10853 Found items count (filenames with newline was excluded from the search):   0 .\/ancient-tmp.find-example.csv   7 .\/ancient-logs.find-example.csv   7 total 2017-03-13T02:04:06 10853 WARNING: Some 'find' commands returned non-zero exit code, results could be incomplete or incorrect! 2017-03-13T02:04:06 10853 Exit codes list: 1 2017-03-13T02:04:06 10853 Finished action: find <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <code>grep<\/code>, \u043a\u0441\u0442\u0430\u0442\u0438, \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d, \u0442.\u043a. \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043f\u0438\u0448\u0443\u0442 \u0432 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b, \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\/\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0451 \u0434\u043e \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0441\u043f\u0435\u043b \u0434\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0447\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u044b \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0441\u0442\u044c, \u0430 \u0447\u0430\u0441\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0440\u0443\u0447\u043d\u043e\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>vim .\/ancient-logs.find-example.csv mv .\/ancient-logs.find-example.csv{,.approved} mv .\/ancient-tmp.find-example.csv{,.approved} <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">.\/findNclean mv -c .\/findNclean.conf.example  # fail<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>2017-03-13T02:05:32 11141 Start action: mv 2017-03-13T02:05:32 11141 Config: .\/findNclean.conf.example 2017-03-13T02:05:32 11141 Debug mode enabled 2017-03-13T02:05:32 11141 Config rules count: 2 2017-03-13T02:05:32 11141 Relative paths allowed. Current dir: \/home\/user\/path\/to\/findNclean 2017-03-13T02:05:32 11141 Effective config content: &lt;Global&gt;     DEBUG = true     REL_PATH_ALLOW = true     APPROVED_SUFFIX = .approved &lt;\/Global&gt; &lt;Rule1  find\/move old unused *.tmp files in \/tmp, \/var and current user home dir&gt;     result_list = .\/ancient-tmp.find-example.csv     search_path = \/var\/     search_path = \/tmp\/     search_path = ~\/     type = f     name = .*\\.tmp     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-tmp.move-example.csv     move_log_err = .\/ancient-tmp.move-example.err.csv &lt;\/Rule1&gt; &lt;Rule2  The same as above but for small non-zero logs&gt;     result_list = .\/ancient-logs.find-example.csv     search_path = ~\/     search_path = \/var\/     search_path = \/tmp\/     type = f     name = .*\\.log(\\.gz)?     size &gt;  0     size &lt;= 2M     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-logs.move-example.csv     move_log_err = .\/ancient-logs.move-example.err.csv &lt;\/Rule2&gt; 2017-03-13T02:05:32 11141 All non-zero size existing move_log and move_log_err files will be preliminary backuped: 2017-03-13T02:05:32 11141 Start processing the following move lists in background:   0 .\/ancient-tmp.find-example.csv.approved   2 .\/ancient-logs.find-example.csv.approved   2 total 2017-03-13T02:05:32 11141 Wait for all background processes completion... mv: cannot move '\/var\/log\/openvpn\/00004-test.log' to '.\/00004-test.log': Permission denied mv: cannot move '\/var\/log\/openvpn\/00009-tmp.log' to '.\/00009-tmp.log': Permission denied 2017-03-13T02:05:32 11141 Completed in 0 sec 2017-03-13T02:05:32 11141 Moved items count (successful canceled failed move_log  [move_log_err]):   0 0 0 .\/ancient-tmp.move-example.csv  .\/ancient-tmp.move-example.err.csv   0 0 2 .\/ancient-logs.move-example.csv  .\/ancient-logs.move-example.err.csv   0 0 2 total 2017-03-13T02:05:32 11141 Finished action: mv removed '\/dev\/shm\/findNclean.exch26957.tmp' removed '\/dev\/shm\/findNclean.exch24396.tmp' <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">sudo .\/findNclean mv -c .\/findNclean.conf.example  # success<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code>2017-03-13T02:06:48 11394 Start action: mv 2017-03-13T02:06:48 11394 Config: .\/findNclean.conf.example 2017-03-13T02:06:48 11394 Debug mode enabled 2017-03-13T02:06:48 11394 Config rules count: 2 2017-03-13T02:06:48 11394 Relative paths allowed. Current dir: \/home\/user\/path\/to\/findNclean 2017-03-13T02:06:48 11394 Effective config content: &lt;Global&gt;     DEBUG = true     REL_PATH_ALLOW = true     APPROVED_SUFFIX = .approved &lt;\/Global&gt; &lt;Rule1  find\/move old unused *.tmp files in \/tmp, \/var and current user home dir&gt;     result_list = .\/ancient-tmp.find-example.csv     search_path = \/var\/     search_path = \/tmp\/     search_path = ~\/     type = f     name = .*\\.tmp     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-tmp.move-example.csv     move_log_err = .\/ancient-tmp.move-example.err.csv &lt;\/Rule1&gt; &lt;Rule2  The same as above but for small non-zero logs&gt;     result_list = .\/ancient-logs.find-example.csv     search_path = ~\/     search_path = \/var\/     search_path = \/tmp\/     type = f     name = .*\\.log(\\.gz)?     size &gt;  0     size &lt;= 2M     accessed &lt; 2017     move_path    = .\/     move_log     = .\/ancient-logs.move-example.csv     move_log_err = .\/ancient-logs.move-example.err.csv &lt;\/Rule2&gt; 2017-03-13T02:06:48 11394 All non-zero size existing move_log and move_log_err files will be preliminary backuped: 2017-03-13T02:06:48 11394 Start processing the following move lists in background:   0 .\/ancient-tmp.find-example.csv.approved   2 .\/ancient-logs.find-example.csv.approved   2 total 2017-03-13T02:06:48 11394 Wait for all background processes completion... 2017-03-13T02:06:48 11394 Completed in 0 sec 2017-03-13T02:06:48 11394 Moved items count (successful canceled failed move_log  [move_log_err]):   0 0 0 .\/ancient-tmp.move-example.csv  .\/ancient-tmp.move-example.err.csv   2 0 0 .\/ancient-logs.move-example.csv  .\/ancient-logs.move-example.err.csv   2 0 0 total 2017-03-13T02:06:48 11394 Finished action: mv removed '\/dev\/shm\/findNclean.exch24681.tmp' removed '\/dev\/shm\/findNclean.exch11002.tmp' <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/div>\n<\/div>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 findNclean \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0430\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0447\u0442\u043e-\u0442\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>NOTIFICATION_SCRIPT<\/code> \u0441 \u043f\u0443\u0442\u0451\u043c \u043a\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0443, \u0442\u043e\u0433\u0434\u0430 \u0435\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0412 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u044b \u0441 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430\u043c\u0438 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f, \u0445\u043e\u0442\u044f, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 (\u0431\u0435\u0437 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f), \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438 \u0438\u0445 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u0435\u0439 <code>IGNORE_FILES_WITH_NEWLINES = false<\/code>.<\/p>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u0432\u0441\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0437\u0430\u043f\u0438\u0445\u0430\u043d\u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438):<\/p>\n<pre><code class=\"bash\">read -r -d '' VARIABLE &lt;&lt;'EOF' bla-bla line EOF<\/code><\/pre>\n<p>  \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"bash\">VARIABLE=$(cat &lt;&lt;'EOF' The bla-bla line EOF ) <\/code><\/pre>\n<p>  \u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0435\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u0434\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0431\u0435\u0437 \u043e\u0441\u043e\u0431\u043e\u0439 \u043d\u0443\u0436\u0434\u044b \u043d\u0435 \u0434\u0451\u0440\u0433\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438, \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <s>slowpoke-<\/s>bash-\u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u0443\u0436\u0435 \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f, \u043e\u043d\u0438 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f, \u043f\u0443\u0441\u0442\u044f\u0447\u0451\u043a, \u0430 \u043f\u0440\u0438\u044f\u0442\u043d\u043e:<\/p>\n<pre><code class=\"bash\">unset DESCRIPTION USAGE CONFIG_USAGE TRICKS  # No need help variables yet <\/code><\/pre>\n<p>  \u0411\u043b\u0438\u0436\u0435 \u043a \u0448\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c \u0436\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f. \u0414\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 <code>bash<\/code> \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"bash\">printf -v BV '%d%03d%03d' &quot;${BASH_VERSINFO[0]}&quot; &quot;${BASH_VERSINFO[1]}&quot; &quot;${BASH_VERSINFO[2]}&quot;  # Bash version in numbers like 4003046, where 4 is major version, 003 is minor, 046 is subminor. ((BV &lt; 3002025)) && echo &quot;WARNING: bash version ${BASH_VERSION} is too old (below 3.2.25)! This app was not tested with too ancient versions!&quot; &gt;&2 <\/code><\/pre>\n<p>  <code>printf<\/code> \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c <code>BV=$(bla-bla)<\/code>, \u0438\u0431\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0431\u0435\u0437 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u043e\u0434\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u043b\u0435\u0433\u0430\u043d\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0435\u0440\u0441\u0438\u0438, \u0447\u0435\u043c \u0437\u0430\u043f\u0438\u0445\u0438\u0432\u0430\u043d\u0438\u0435 \u0435\u0451 \u0432 <code>int<\/code> \u0441 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u043a \u0441 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0435\u0441\u043b\u0438 \u0432 \u0443 \u0442\u0435\u0431\u044f \u0432 \u0437\u0430\u043a\u0440\u043e\u043c\u0430\u0445 \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0432\u0430\u043b\u044f\u043b\u0441\u044f \u2014 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0439!<br \/>  \u0412\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 <code>((BV &lt; 3002025))<\/code> \u0442\u043e\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c <code>[[ &quot;${BV}&quot; -lt 3002025 ]]<\/code>, \u0442.\u043a. \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u043a\u043e\u0440\u043e\u0447\u0435 \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u0435\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0442\u043e \u0442\u0430\u043a \u043f\u0438\u0448\u0435\u0442?! BEP-8 \u043d\u0430 \u0442\u0435\u0431\u044f \u043d\u0435\u0442!<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0440\u0443\u0433\u0430\u0442\u044c \u0437\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043a\u0430\u043a \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0448\u0435), \u043d\u043e \u0442.\u043a. \u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043c\u043e\u0433\u0443 \u0441\u0435\u0431\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c, \u043c\u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0441\u0442\u0440\u043e\u043a \u0432 IDE. \u041d\u0443 \u0438 \u0435\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u044f\u0433\u0430 \u043a inline \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c, \u0442\u0430\u043a \u0447\u0442\u043e \u043b\u044e\u0431\u043b\u044e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0443\u043d\u043a\u0442\u0438\u043a. \u0425\u043e\u0442\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f ;).<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0440\u0435\u0437\u043c\u0435\u0440\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>printf %q<\/code> \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e <code>eval<\/code>, \u043d\u043e \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u043e\u0431\u0440\u0430\u0437\u043d\u0430\u044f \u0446\u0435\u043d\u0430 \u0437\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0445\u043e\u0442\u044f \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u043c\u0435\u0441\u0442\u0430\u0445 \u044d\u0442\u0438 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0442\u0430\u043a \u0443\u0436 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b, \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0438\u043d\u0435\u0440\u0446\u0438\u0438.  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u043e\u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0440\u0443\u0433\u043b\u044b\u0435 \u0441\u043a\u043e\u0431\u043a\u0438:<\/p>\n<pre><code class=\"bash\">RULES_JOIN_ALLOW=1  # Allow optimize performance by join Rules with identical search_paths collection if ((RULES_JOIN_ALLOW)); then     echo You'll see this msg fi <\/code><\/pre>\n<p>  \u041c\u043d\u043e\u0433\u0438\u0435 \u0437\u043d\u0430\u044e\u0442 \u043f\u0440\u043e \u043d\u043e\u0442\u0430\u0446\u0438\u0438 \u0442\u0438\u043f\u0430 <code>$'\\r'$'\\n'<\/code>, \u0438\u0445 \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>echo<\/code> \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0445 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>\/bin\/echo<\/code>, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>echo -e<\/code> (\u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0438\u0445 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442). \u041d\u043e \u0432 \u0437\u0430\u043a\u0430\u0432\u044b\u0447\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445 \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0432\u044b\u0447\u043a\u0438. \u0411\u043b\u0430\u0433\u043e \u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438 \u0442\u043e\u0433\u0434\u0430 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u0439-\u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043d\u0438\u0439:<\/p>\n<pre><code class=\"bash\">readonly EOL=$'\\n'  # Newline ...     approve|confirm)         quit 255 &quot;This action is not implemented yet.${EOL}You have to manually overview and approve list of files by appending${EOL}corresponding APPROVED_SUFFIX to the result_list value.${EOL}By default APPROVED_SUFFIX is none, so all result_list will be treated as approved.&quot; <\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u0430\u043f\u0435\u043b\u043b\u0438\u0440\u0443\u0435\u0442 \u043a \u0438\u0437\u0432\u0435\u0447\u043d\u043e\u043c\u0443 \u0445\u043e\u043b\u0438\u0432\u0430\u0440\u0443 \u00ab\u0442\u0430\u0431\u044b vs \u043f\u0440\u043e\u0431\u0435\u043b\u044b\u00bb. \u0427\u0442\u043e\u0431 \u043d\u0435 \u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u0431\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 here-doc \u0441 \u043e\u0442\u0441\u0442\u0443\u043f\u0430\u043c\u0438:<\/p>\n<pre><code class=\"bash\">\tread -r -d '' tmp &lt;&lt;-'EOF' \tThis action is not implemented yet. \tYou have to manually overview and approve list of files by appending \tcorresponding APPROVED_SUFFIX to the result_list value. \tBy default APPROVED_SUFFIX is none, so all result_list will be treated as approved. \tEOF \tquit 255 &quot;${tmp}&quot; \tunset tmp <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f:<\/p>\n<pre><code class=\"bash\">\ttmp='This action is not implemented yet.'$'\\n' \ttmp+='You have to manually overview and approve list of files by appending'$'\\n' \ttmp+='corresponding APPROVED_SUFFIX to the result_list value.'$'\\n' \ttmp+='By default APPROVED_SUFFIX is none, so all result_list will be treated as approved.' \tquit 255 &quot;${tmp}&quot; \tunset tmp <\/code><\/pre>\n<p>  \u041d\u043e \u043c\u043e\u0451 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0442\u0430\u0431\u044b \u0442\u0443\u0442 \u0438\u043b\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u0445\u043e\u0442\u044c \u0438 \u0441\u0442\u0440\u043e\u043a\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043e\u0434\u043d\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0430\u0431\u044b \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c here-doc \u0441 \u0438\u0441\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432 \u043f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435. \u041d\u043e \u043a\u043e\u0434 \u0441 \u0442\u0430\u0431\u0430\u043c\u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u2014 \u0432\u0441\u044f\u043a\u0438\u0435 \u0430\u0432\u0442\u043e\u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0451 \u043f\u043e\u0440\u0442\u044f\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u043a\u0430\u043a \u0436\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435. <a href=\"https:\/\/google.github.io\/styleguide\/shell.xml?showone=Indentation#Indentation\">\u0413\u0443\u0433\u043b \u0418\u043d\u043a \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432<\/a> \u0438 \u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0441\u043a\u043b\u043e\u043d\u044f\u044e\u0441\u044c \u0442\u0443\u0434\u0430 \u0436\u0435.<\/p>\n<p>  \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043a\u043e\u043d \u0432\u0435\u043a\u043e\u0432 \u0434\u0435\u043b\u0430\u043b\u0430\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>date<\/code>, \u0445\u043e\u0442\u044f \u0432 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 <code>bash<\/code> \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>printf %(datefmt)T<\/code>, \u043f\u0440\u0430\u0432\u0434\u0430 \u0431\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e\u043b\u0435\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b:<\/p>\n<pre><code class=\"bash\">readonly TIMESTAMP_FORMAT='%Y-%m-%dT%H:%M:%S' ... if ((BV &gt; 4002000)); then  # Modern bash versions log() {     ## Fast (builtin) but sec is min sample for most implementations     printf &quot;%(${TIMESTAMP_FORMAT})T %5d %s\\n&quot; '-1' $$ &quot;$*&quot;  # %b convert escapes, %s print as is } else  # Legacy bash versions log() {     ## Slow (subshell, date) but support nanoseconds     echo &quot;$(exec -c date +&quot;${TIMESTAMP_FORMAT}&quot;) $$ $*&quot; } fi <\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>$(exec -c some command)<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0432 \u043f\u043e\u0434\u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0435. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430-\u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0448\u0435\u043b\u043b\u043e\u043c \u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439, \u043d\u0443 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u043d\u0430 0-2% \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043d\u043e \u0441 \u043c\u0438\u0440\u0443 \u043f\u043e \u043d\u0438\u0442\u043a\u0435 \u043d\u0430 \u0448\u0430\u043f\u043e\u0447\u043a\u0443 \u043d\u0430\u0431\u0435\u0440\u0451\u0442\u0441\u044f). \u0422\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>$(some command)<\/code>:<\/p>\n<pre><code>\u251c\u2500\u2500 \/bin\/bash  # \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441   \u00a0 \u2514\u2500\u2500 \/bin\/bash  # \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0430 \u00a0       \u2514\u2500\u2500 some command <\/code><\/pre>\n<p>  \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 <code>exec<\/code> \u043b\u0438\u0448\u043d\u0435\u0439 \u043f\u0440\u043e\u0441\u043b\u043e\u0439\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 <code>-c<\/code> \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0441 \u043f\u0443\u0441\u0442\u044b\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0441\u043a\u043e\u0440\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 (\u0441 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e \u0441\u0435\u043a\u0443\u043d\u0434\u044b) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"bash\">if ((BV &gt; 4002000)); then  # Modern bash versions ## Set global variable with the name $1 and time format $2 set_timestamp() {     printf -v &quot;$1&quot; &quot;%($2)T&quot; '-1' } else  # Legacy bash versions set_timestamp() {     printf -v &quot;$1&quot; '%s' &quot;$(exec -c date +&quot;$2&quot;)&quot; } fi ... set_timestamp ts '%s' # \u043a\u043e\u0434 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f set_timestamp TS '%s' log &quot;Completed in $((TS-ts)) sec&quot; <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>SECONDS<\/code>. \u041e\u043d\u0430 \u0440\u0430\u0432\u043d\u0430 0 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u0415\u0441\u043b\u0438 \u0435\u0451 \u043e\u0431\u043d\u0443\u043b\u0438\u0442\u044c, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a \u043d\u0435\u0439, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043a\u043e\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445. \u0427\u0442\u043e\u0431 \u043d\u0435 \u0442\u0435\u0440\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"bash\">ts=${SECONDS} # \u043a\u043e\u0434 \u0432\u0440\u0435\u043c\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f TS=${SECONDS} log &quot;Completed in $((TS-ts)) sec&quot; <\/code><\/pre>\n<p>  \u042d\u0442\u043e, \u0434\u0443\u043c\u0430\u044e, \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0447\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>set_timestamp<\/code>.<br \/>  \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e:<\/p>\n<pre><code class=\"bash\">while IFS= read -r line || [[ -n ${line} ]]; do     ... done &lt;\/path\/to\/some\/text\/file <\/code><\/pre>\n<p>  \u0417\u0430\u0447\u0438\u0441\u0442\u043a\u0430 <code>IFS<\/code> \u0434\u043b\u044f <code>read<\/code> \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u0430\u0431\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b;<br \/>  <code>-r<\/code> \u2014 \u0447\u0442\u043e\u0431\u044b \u0441\u0442\u0440\u043e\u043a\u0430 \u0447\u0438\u0442\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0431\u0435\u0437 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u0438 escape-\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0435\u0439 \u0442\u0438\u043f\u0430 <code>\\t\\r<\/code>;<br \/>  <code>|| [[ -n ${line} ]]<\/code> \u2014 \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 \u0446\u0438\u043a\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0441\u0442\u0440\u043e\u043a\u0438, \u0431\u0435\u0437 \u043d\u0435\u0451 <code>read<\/code> \u0432\u0435\u0440\u043d\u0451\u0442 \u043d\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u043a\u043e\u0434 \u0438 \u0446\u0438\u043a\u043b \u0442\u0443\u0442 \u0436\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0442\u0432\u043e\u0440\u044f\u0442\u0441\u044f \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0432 Linux (\u0441\u043c. \u043e\u043f\u0446\u0438\u044e <code>born<\/code>): \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 ext4) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0438 \u043f\u0440\u0438\u043b\u0435\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, <code>stat<\/code> \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, <code>find<\/code> \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<pre><code>user@host:~$stat \/   \u0424\u0430\u0439\u043b: '\/'   \u0420\u0430\u0437\u043c\u0435\u0440: 4096      \t\u0411\u043b\u043e\u043a\u043e\u0432: 8          \u0411\u043b\u043e\u043a \u0412\/\u0412: 4096   \u043a\u0430\u0442\u0430\u043b\u043e\u0433 \u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e: fc00h\/64512d\tInode: 2           \u0421\u0441\u044b\u043b\u043a\u0438: 25 \u0414\u043e\u0441\u0442\u0443\u043f: (0755\/drwxr-xr-x)  Uid: (    0\/    root)   Gid: (    0\/    root) \u0414\u043e\u0441\u0442\u0443\u043f: 2017-03-16 15:28:06.121675004 +0700 \u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d: 2017-02-27 17:09:09.937545795 +0700 \u0418\u0437\u043c\u0435\u043d\u0451\u043d: 2017-02-27 17:09:09.937545795 +0700  \u0421\u043e\u0437\u0434\u0430\u043d: - <\/code><\/pre>\n<p>  \u043d\u043e \u043e\u043d\u043e \u0435\u0441\u0442\u044c!<\/p>\n<pre><code>user@host:~$sudo debugfs -R &quot;stat &lt;$(stat -c %i \/)&gt;&quot; \/dev\/ROOTFSDRIVE Inode: 2   Type: directory    Mode:  0755   Flags: 0x80000 Generation: 0    Version: 0x00000000:00000086 User:     0   Group:     0   Size: 4096 File ACL: 0    Directory ACL: 0 Links: 25   Blockcount: 8 Fragment:  Address: 0    Number: 0    Size: 0  ctime: 0x58b3fac5:df87410c -- Mon Feb 27 17:09:09 2017  atime: 0x58ca4c96:1d0273f0 -- Thu Mar 16 15:28:06 2017  mtime: 0x58b3fac5:df87410c -- Mon Feb 27 17:09:09 2017 crtime: 0x5801149b:00000000 -- Sat Oct 15 00:23:39 2016 Size of extra inode fields: 32 EXTENTS: (0):9249 <\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0432\u043e\u0442 <a href=\"http:\/\/lists.gnu.org\/archive\/html\/bug-findutils\/2011-11\/msg00015.html\">\u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/a>.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f <code>mv<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0438\u0432\u044b\u0447\u043d\u044b\u043c (\u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430) \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\"># \u042f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0447\u0442\u043e dest_name - \u0444\u0430\u0439\u043b mv --backup=t -vT -- &quot;${name}&quot; &quot;${dest_name}&quot;  # \u042f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435, \u0447\u0442\u043e dest - \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f, \u0430 \u0432\u0441\u0451, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 '--', - \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e mv --backup=t -vt &quot;${dest}&quot; -- &quot;${name}&quot;  # \u041a\u043e\u0433\u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043d\u0430\u0434\u043e, # \u0438 \u0434\u0430\u0436\u0435 \u0437\u0430\u0438\u043a\u0430\u0442\u044c\u0441\u044f \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u0441\u043c\u0435\u043b\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0433\u043e! mv --backup=off -vft &quot;${dest}&quot; -- &quot;${name}&quot; <\/code><\/pre>\n<p>  <code>--backup[=CONTROL]<\/code> \u2014 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0441\u0431\u043e\u044f \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0432\u0435\u0440\u0442\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u0437\u0430\u0434 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442.<\/p>\n<p>  <code>--<\/code> \u0442\u043e\u0436\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 (\u044d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>mv<\/code>, \u043d\u043e \u0438 \u0434\u0440\u0443\u0433\u0438\u0445), \u0442.\u043a. \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043e\u0442\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0435\u0444\u0438\u0441\u0430). \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0438\u0431\u043e \u0443 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u043b\u044f <code>mv<\/code> \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u0431\u043e <code>\/<\/code>, \u043b\u0438\u0431\u043e <code>.\/<\/code> \u2014 \u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e <code>which<\/code>, \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 <code>hash<\/code>:<\/p>\n<pre><code class=\"bash\">for util in ${DEPENDENCIES}; do     hash &quot;${util}&quot; &&gt;\/dev\/null || quit 1 &quot;ERROR: '${util}' not found on this system&quot; done; unset util <\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u043e\u043f\u0446\u0438\u0439 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 (\u043a\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442), \u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043c\u0430\u043d\u0434\u043e\u0439 <code>getopts<\/code>:<\/p>\n<pre><code class=\"bash\">OPTIND=2  # Ignore first argument ACTION even if it has leading hyphen while getopts ':dvc:' OPT; do     [[ &quot;${OPTARG:0:1}&quot; = '-' ]] && quit 1 &quot;ERROR: Option argument cannot start with hyphen, got: ${OPTARG}&quot;     case &quot;${OPT}&quot; in         d|v) DEBUG=1; v=v; ;;         c) CONFIG=${OPTARG} ;;         :) quit 1 &quot;ERROR: Option -${OPTARG} requires an argument&quot;; ;;         *) quit 1 &quot;ERROR: Unrecognized option: -${OPTARG}&quot;     esac done <\/code><\/pre>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u0441\u0444\u0435\u0440\u0430 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u043d \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 (\u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 <code>--<\/code>).<\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u043d\u0435 \u0441\u0430\u043c\u0438\u0445, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0432\u043e\u0434\u0430) \u0438\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0437\u0430 \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0444\u0438\u0433\u0443\u0440\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445:<\/p>\n<pre><code class=\"bash\">${var#word}   # \u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ${var##word}  # \u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ${var%word}   # \u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441 ${var%%word}  # \u0423\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0439 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0441\u0443\u0444\u0444\u0438\u043a\u0441 ${var\/pattern\/string}  # \u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430 ${var^pattern}   # \u041a \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f ${var^^pattern}  # \u041a \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f ${var,pattern}   # \u041a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f ${var,,pattern}  # \u041a \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"bash\">${var~}   # \u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 ${var~~}  # \u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 <\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u0434\u0435 \u0438\u0445 \u043c\u043d\u043e\u0433\u043e \u0433\u0434\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c. \u0412\u043e\u0442 \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0437\u0430\u043d\u044f\u0442\u043d\u044b\u0445 \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"bash\">parallel_run &quot;${Commands[@]\/#\/exec -c }&quot;  # Prepending of 'exec -c ' need to avoid additional subshell creation <\/code><\/pre>\n<p>  \u041e\u043d\u0430 \u0432\u0441\u0442\u0430\u0432\u0438\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 &#8216;<code>exec -c <\/code>&#8216;.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043b\u044b\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435): <code>$((${MOVE_OK_COUNT[@]\/#\/+}))<\/code><\/p>\n<p>  \u0412 <abbr title=\"Pathname Expansion: \u043c\u0438\u0440\u0435 \u043c\u043e\u0440\u0435\">\u043c[\u0438\u043e]\u0440\u0435<\/abbr> <code>bash<\/code> \u0435\u0449\u0451 \u043f\u043e\u043b\u043d\u043e \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u043a\u0430\u043c\u043d\u0435\u0439 \u0438 \u043d\u044b\u0440\u044f\u0442\u044c \u0437\u0430 \u043d\u0438\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0442\u043e\u043d\u0435\u0448\u044c \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u043e\u0441\u0438\u043b\u0438\u043b <code>man bash<\/code> \u0438 \u0437\u0430\u0441\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0438\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0441\u043d\u0438\u043c\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0434 \u0442\u043e\u0431\u043e\u0439 \u0448\u043b\u044f\u043f\u0443.<\/p>\n<p>  \u0417\u0430\u043a\u043e\u043d\u0447\u0443 \u0446\u0438\u0442\u0430\u0442\u043e\u0439 \u0438\u0437 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u044d\u043f\u043e\u0441\u0430:<\/p>\n<pre><code>BUGS        It's too big and too slow. <\/code><\/pre>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0432\u044b\u0431\u0438\u0440\u0430\u0439 <s><code>#!\/bin\/bash<\/code><\/s> \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0448\u0435\u0431\u0430\u043d\u0433!<br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/323828\/\"> https:\/\/habrahabr.ru\/post\/323828\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><a href=\"https:\/\/habrahabr.ru\/post\/323828\/#\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f83\/b42\/91d\/f83b4291d39b406ca2a482f5732765a1.jpg\"\/><\/a><\/p>\n<p>  \u041d\u0435\u0442-\u043d\u0435\u0442, \u044d\u0442\u043e\u0442 \u043f\u043e\u0441\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u0440\u043e \u0431\u043e\u043b\u044c \u0438 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0435! \u0414\u0430\u0436\u0435 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442. \u041f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043e \u0437\u043d\u0430\u0447\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 ).<\/p>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435, \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0442\u0435\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u0435\u0436\u0443\u044e <a href=\"https:\/\/github.com\/vmspike\/findNclean\">\u0443\u0442\u0438\u043b\u0438\u0442\u0443<\/a>, \u0441 \u043f\u044b\u043b\u0443 \u0441 \u0436\u0430\u0440\u0443 \u0438\u0437 \u043f\u043e\u0434 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u0421\u0430\u043c\u0430 \u043f\u043e \u0441\u0435\u0431\u0435 \u043e\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u0438\u0447\u0435\u0433\u043e (\u0445\u043e\u0442\u044c \u0438 \u0434\u043e \u0431\u043b\u0435\u0441\u043a\u0430 \u0431\u043b\u044f\u0445\u0438 \u043d\u043e\u0432\u043e\u0438\u0441\u043f\u0435\u0447\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043c\u0431\u0435\u043b\u044f \u0435\u0451 \u0435\u0449\u0451 \u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c), \u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0451 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043a\u0430\u043a-\u0442\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u0432\u0430\u0442\u043e. \u041f\u043e\u0442\u043e\u043c \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043d\u0430 \u0435\u0451 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0431\u0430\u0448\u0438\u0437\u043c\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0430\u043c \u0440\u0430\u043d\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f. \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0438\u0442\u044c \u0434\u0432\u0443\u0445 \u0437\u0430\u0439\u0446\u0435\u0432 \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0435\u0451 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438. \u041d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u043d\u0435\u0433\u043e\u0436\u0435 \u043c\u0443\u0447\u0438\u0442\u044c \u0438 \u0431\u0435\u0437 \u0442\u043e\u0433\u043e \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u043f\u043e\u0442\u0440\u0451\u043f\u0430\u043d\u043d\u044b\u0445 \u0437\u0432\u0435\u0440\u0443\u0448\u0435\u043a, \u0438 \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0445 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u0440\u0438\u0447\u0435\u0441\u0430\u0442\u044c. \u0422\u0440\u0435\u0442\u0438\u0439 \u0437\u0430\u044f\u0446 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043d\u0435 \u0437\u0430\u044f\u0446 \u0432\u043e\u0432\u0441\u0435, \u0430 \u0443\u0434\u0430\u0432) \u043c\u0443\u0434\u0440\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0451\u043b \u0432\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u0431\u0430\u0440\u0434\u0430\u043a\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433, \u0442\u0435\u0431\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b \u0438 \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0436\u0435 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0438\u0445 \u043a\u0443\u0434\u0430-\u0442\u043e; \u0438\u043b\u0438 \u0442\u0435\u0431\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043a\u0430\u043a\u043e\u0439 \u0441\u043b\u043e\u0439 \u043f\u044b\u043b\u0438 \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0442\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 \u0430\u043f\u0442\u0430\u0439\u043c\u043e\u043c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e <s>\u0441\u043e\u0442\u0435\u043d<\/s> \u043b\u0435\u0442 \u0438 \u0442\u0435\u0431\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d bash; \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u0442\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0438\u043c\u043e <abbr title=\"Brace Expansion: \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u043e\">\u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b{,\u0430,\u043e}<\/abbr>, \u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438 \u043c\u0438\u043c\u043e!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-283513","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/283513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=283513"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/283513\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=283513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=283513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=283513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}