Название: Алхимия командной строки Отправлено: Igors от Июнь 05, 2013, 11:12 Добрый день
Нужно было избавиться от старого svn, нашел такую "фишку" Цитировать find . -name .svn -print0 | xargs -0 rm -r Ну конечно сделал копии и потом запустил - все норм, все .svn были удалены рекурсивно. Перед этим долго пытался сделать это по-другому (напр svn export) но ничего не выходило. Можно ли пояснить что значат эти параметры, и каков ход мысли пишущего командную строку? Ну вот напр мне хотелось бы распечатать все .svn (или .git) с полными путями пока не трогая их. Как это сделать? Спасибо Название: Re: Алхимия командной строки Отправлено: mutineer от Июнь 05, 2013, 11:32 Код: find . -name .svn -print0 Код: xargs -0 rm -r Название: Re: Алхимия командной строки Отправлено: Majestio от Июнь 05, 2013, 11:33 Добрый день Нужно было избавиться от старого svn, нашел такую "фишку" Цитировать find . -name .svn -print0 | xargs -0 rm -r Ну конечно сделал копии и потом запустил - все норм, все .svn были удалены рекурсивно. Перед этим долго пытался сделать это по-другому (напр svn export) но ничего не выходило. Можно ли пояснить что значат эти параметры, и каков ход мысли пишущего командную строку? Ну вот напр мне хотелось бы распечатать все .svn (или .git) с полными путями пока не трогая их. Как это сделать? Спасибо Используются две команды: find (http://ru.wikipedia.org/wiki/Find) и xargs (http://ru.wikipedia.org/wiki/Xargs) команда find ищет файлы по имени .svn и передает найденное команде xarg. Последняя в свою очередь выполняет "rm -r" (рекурсивоное удаление) с переданными аргументами. Распечатать можно похожей командой: find . -name .svn -print0 | xargs -0 echo хотя проще find . -name .svn Название: Re: Алхимия командной строки Отправлено: GreatSnake от Июнь 05, 2013, 12:07 find . -name .svn -print0 | xargs -0 rm -r можно малость по-прощеКод
Название: Re: Алхимия командной строки Отправлено: Igors от Июнь 05, 2013, 13:12 Спасибо, теперь яснее. Еще пара квешнзов
А где кончаются аргументы одной команды и начинается др команда? В исходном примере это вроде |, а тут сразу "rm"? Или это аргумент для -exec? И где возвращаемое значение? То есть как бы во внутреннем буфере и echo выводит его на stdout? Тогда почему find . -name .svn выводит без всякого эха? Необходимость что-то набирать в консоли всегда вызывала у меня большие трудности (ничего не смог запомнить из command.com :)) Название: Re: Алхимия командной строки Отправлено: mutineer от Июнь 05, 2013, 13:18 А где кончаются аргументы одной команды и начинается др команда? В исходном примере это вроде |, а тут сразу "rm"? Или это аргумент для -exec? Да, это аргумент для ключа -exec команды find И где возвращаемое значение? То есть как бы во внутреннем буфере и echo выводит его на stdout? Тогда почему find . -name .svn выводит без всякого эха? возвращаемое значение чего? Название: Re: Алхимия командной строки Отправлено: kambala от Июнь 05, 2013, 13:32 программы возвращают 0 в случае успеха и ненулевое число в иных случаях
Название: Re: Алхимия командной строки Отправлено: Igors от Июнь 05, 2013, 13:38 возвращаемое значение чего? Ну вот Вы объснили что результат find подается на вход др команды, где он хранится? Каким образом он попадает на stdin (если я верно понял)программы возвращают 0 в случае успеха и ненулевое число в иных случаях Это код возрата, а данные-то где?Название: Re: Алхимия командной строки Отправлено: kambala от Июнь 05, 2013, 14:02 данные в stdout, попадают туда наверное с помощью printf, труба (pipe) | перенаправялет вывод на вход следующей команде
Название: Re: Алхимия командной строки Отправлено: GreatSnake от Июнь 05, 2013, 14:03 В случае -exec вместо {}
Название: Re: Алхимия командной строки Отправлено: lit-uriy от Июнь 07, 2013, 03:28 Igors, если меня не подводит мой маразм, то вот ещё информация:
Вертикальная черта - это логическая операция ИЛИ. Есть ещё & - операция И Т.е. запись в командной строке: команда1 & команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда выполнятся не будет команда1 | команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда всё равно выполнится В обоих случаях вывод первой команды в stdout будет подан на stdin второй команды Название: Re: Алхимия командной строки Отправлено: mutineer от Июнь 07, 2013, 08:37 Igors, если меня не подводит мой маразм, то вот ещё информация: Вертикальная черта - это логическая операция ИЛИ. Есть ещё & - операция И Т.е. запись в командной строке: команда1 & команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда выполнятся не будет команда1 | команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда всё равно выполнится В обоих случаях вывод первой команды в stdout будет подан на stdin второй команды Подводит - в баше вертикальная черта это пайп (перенаправление вывода одной команды на ввод другой). А логические операции осуществляются через && и || И в обоих случаях логических операций вывод обеих команд будет выдан на консоль, перенаправления не будет З.Ы. Если мы говорим про bash, естественно:) Название: Re: Алхимия командной строки Отправлено: Igors от Июнь 07, 2013, 12:40 З.Ы. Если мы говорим про bash, естественно:) Неудобно спрашивать но все же :) Кто там из них bash и "не bash" и в чем разница?Название: Re: Алхимия командной строки Отправлено: mutineer от Июнь 07, 2013, 12:50 З.Ы. Если мы говорим про bash, естественно:) Неудобно спрашивать но все же :) Кто там из них bash и "не bash" и в чем разница?Bash - интерпретатор командной строки. В популярных дистрибутивах является дефолтным. Именно он делает пайпы, перенаправления, подсказывает по табу и др. Есть и другие интерпретаторы, у них синтаксис логических операций может быть другим Название: Re: Алхимия командной строки Отправлено: Igors от Июнь 07, 2013, 14:00 Bash - интерпретатор командной строки. В популярных дистрибутивах является дефолтным. Именно он делает пайпы, перенаправления, подсказывает по табу и др. Есть и другие интерпретаторы, у них синтаксис логических операций может быть другим Понял, спасибоНазвание: Re: Алхимия командной строки Отправлено: tester64 от Июнь 07, 2013, 14:47 Кто там из них bash и "не bash" и в чем разница? Вначале Потом командных интерпретаторов расплодилось неимоверное количество, но получила распространение пара - ksh (Korn Shell, на основе Bourne shell) и csh (C shell). ksh лёг в основу POSIX-стандарта и постепенно вытеснил csh (девяностые). Параллельно развивался bash (появился в 1989 году) и в начале 2000-х вытеснил, параллельно с ростом популярности GNU и Linux, прочие варианты. По языку bash - надмножество Bourne shell (http://en.wikipedia.org/wiki/Bourne_shell). Может работать в POSIX-режиме (когда вызывается с ключом --posix или через симлинк sh в ряде дистрибутивов Linux) или своём основном расширенном режиме. На практике большинство скриптов ограничиваются возможностями POSIX, даже когда в них указывается "#!/bin/bash". Описание языка Bourne shell можно почитать например здесь: An Introduction to the Unix Shell (http://www.ceri.memphis.edu/computer/docs/unix/bshell.htm). Из существенных расширений bash - математика, рекурсивный глоб (**/...), глоб-перечисление ({jpg,png}), регэкспы, ассоциативные массивы. Детальнее - на вики (http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29). Табличное сравнение интерпретаторов можно посмотреть там же (http://en.wikipedia.org/wiki/Comparison_of_computer_shells). Немного об отличиях старого sh и bash на StackOverflow (http://stackoverflow.com/questions/5725296/difference-between-sh-and-bash). Название: Re: Алхимия командной строки Отправлено: Alex Custov от Июнь 07, 2013, 18:25 А почему с svn export не выходило?
Название: Re: Алхимия командной строки Отправлено: Igors от Июнь 07, 2013, 19:04 А почему с svn export не выходило? Да хз, проект старый, Xcode показывает типа svn:/66.77.88 (какой-то явно приблудный IP адрес), если я его даю (в параметрах svn) он бросается туда, а на машине инета вообще нет. Ну и на этом все кончалось - нет доступа к репозиту. Почитал - вроде git приятнее, решил его использовать, все равно из старого репозита ни одного нормального отката не было (я и не знал о его существовании).Название: Re: Алхимия командной строки Отправлено: GreatSnake от Июнь 08, 2013, 11:28 Igors, если меня не подводит мой маразм, то вот ещё информация: Маразм тебя малость подвёл)Вертикальная черта - это логическая операция ИЛИ. Есть ещё & - операция И Т.е. запись в командной строке: команда1 & команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда выполнятся не будет команда1 | команда2 даёт следующее - если команда1 завершится неудачно, то вторая команда всё равно выполнится В обоих случаях вывод первой команды в stdout будет подан на stdin второй команды && - И || - ИЛИ & - отправить процесс в background | - pipe Название: Re: Алхимия командной строки Отправлено: lit-uriy от Июнь 08, 2013, 20:01 может это у меня из-за виндузятной командной строки, в ней перенаправление так делается
<< и >> Название: Re: Алхимия командной строки Отправлено: mutineer от Июнь 08, 2013, 20:15 может это у меня из-за виндузятной командной строки, в ней перенаправление так делается << и >> Ну да, в линуксовой консоли перенаправление тоже делается через <,<<,>>,>. А еще есть пайп (|), который в каком-то смысле тоже перенаправление, только перенаправляет не в файл, а на вход другому процессу Название: Re: Алхимия командной строки Отправлено: Alex Custov от Июнь 09, 2013, 11:25 А почему с svn export не выходило? Да хз, проект старый, Xcode показывает типа svn:/66.77.88 (какой-то явно приблудный IP адрес), если я его даю (в параметрах svn) он бросается туда, а на машине инета вообще нет. Ну и на этом все кончалось - нет доступа к репозиту. Почитал - вроде git приятнее, решил его использовать, все равно из старого репозита ни одного нормального отката не было (я и не знал о его существовании).Так svn export можно делать и в локальной копии. Заходишь в проект,и пишешь Код: svn export . ../project-wo-svn |