Russian Qt Forum
Ноябрь 23, 2024, 02:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Алхимия командной строки
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Алхимия командной строки (Прочитано 10527 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Алхимия командной строки
«
:
Июнь 05, 2013, 11:12 »
Добрый день
Нужно было избавиться от старого svn, нашел такую "фишку"
Цитировать
find . -name .svn -print0 | xargs -0 rm -r
Ну конечно сделал копии и потом запустил - все норм, все .svn были удалены рекурсивно. Перед этим долго пытался сделать это по-другому (напр svn export) но ничего не выходило.
Можно ли пояснить что значат эти параметры, и каков ход мысли пишущего командную строку? Ну вот напр мне хотелось бы распечатать все .svn (или .git) с полными путями пока не трогая их. Как это сделать?
Спасибо
Записан
mutineer
Гость
Re: Алхимия командной строки
«
Ответ #1 :
Июнь 05, 2013, 11:32 »
Код:
find . -name .svn -print0
Находит в текущей директории и ниже все сущности с именем .svn и выводит путь к ним на печать используя символ \0 как разделитель
Код:
xargs -0 rm -r
Берет ввод из stdin, разделяет его по символу \0 и отдает каждую запись команде rm -r как аргумент
Записан
Majestio
Гость
Re: Алхимия командной строки
«
Ответ #2 :
Июнь 05, 2013, 11:33 »
Цитата: Igors от Июнь 05, 2013, 11:12
Добрый день
Нужно было избавиться от старого svn, нашел такую "фишку"
Цитировать
find . -name .svn -print0 | xargs -0 rm -r
Ну конечно сделал копии и потом запустил - все норм, все .svn были удалены рекурсивно. Перед этим долго пытался сделать это по-другому (напр svn export) но ничего не выходило.
Можно ли пояснить что значат эти параметры, и каков ход мысли пишущего командную строку? Ну вот напр мне хотелось бы распечатать все .svn (или .git) с полными путями пока не трогая их. Как это сделать?
Спасибо
Используются две команды:
find
и
xargs
команда find ищет файлы по имени .svn и передает найденное команде xarg. Последняя в свою очередь выполняет "rm -r" (рекурсивоное удаление) с переданными аргументами.
Распечатать можно похожей командой:
find . -name .svn -print0 | xargs -0 echo
хотя проще
find . -name .svn
Записан
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Алхимия командной строки
«
Ответ #3 :
Июнь 05, 2013, 12:07 »
Цитата: Igors от Июнь 05, 2013, 11:12
find . -name .svn -print0 | xargs -0 rm -r
можно малость по-проще
Код
Bash
find
.
-name
.svn
-exec
rm
-r
{
}
\;
Записан
Qt 5.11/4.8.7 (X11/Win)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Алхимия командной строки
«
Ответ #4 :
Июнь 05, 2013, 13:12 »
Спасибо, теперь яснее. Еще пара квешнзов
А где кончаются аргументы одной команды и начинается др команда? В исходном примере это вроде |, а тут сразу "rm"? Или это аргумент для -exec?
И где возвращаемое значение? То есть как бы во внутреннем буфере и echo выводит его на stdout? Тогда почему find . -name .svn выводит без всякого эха?
Необходимость что-то набирать в консоли всегда вызывала у меня большие трудности (ничего не смог запомнить из command.com
)
Записан
mutineer
Гость
Re: Алхимия командной строки
«
Ответ #5 :
Июнь 05, 2013, 13:18 »
Цитата: Igors от Июнь 05, 2013, 13:12
А где кончаются аргументы одной команды и начинается др команда? В исходном примере это вроде |, а тут сразу "rm"? Или это аргумент для -exec?
Да, это аргумент для ключа -exec команды find
Цитата: Igors от Июнь 05, 2013, 13:12
И где возвращаемое значение? То есть как бы во внутреннем буфере и echo выводит его на stdout? Тогда почему find . -name .svn выводит без всякого эха?
возвращаемое значение чего?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Алхимия командной строки
«
Ответ #6 :
Июнь 05, 2013, 13:32 »
программы возвращают 0 в случае успеха и ненулевое число в иных случаях
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Алхимия командной строки
«
Ответ #7 :
Июнь 05, 2013, 13:38 »
Цитата: mutineer от Июнь 05, 2013, 13:18
возвращаемое значение чего?
Ну вот Вы объснили что результат find подается на вход др команды, где он хранится? Каким образом он попадает на stdin (если я верно понял)
Цитата: kambala от Июнь 05, 2013, 13:32
программы возвращают 0 в случае успеха и ненулевое число в иных случаях
Это код возрата, а данные-то где?
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Алхимия командной строки
«
Ответ #8 :
Июнь 05, 2013, 14:02 »
данные в stdout, попадают туда наверное с помощью printf, труба (pipe) | перенаправялет вывод на вход следующей команде
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
GreatSnake
Джедай : наставник для всех
Offline
Сообщений: 2921
Re: Алхимия командной строки
«
Ответ #9 :
Июнь 05, 2013, 14:03 »
В случае -exec вместо {}
Записан
Qt 5.11/4.8.7 (X11/Win)
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Алхимия командной строки
«
Ответ #10 :
Июнь 07, 2013, 03:28 »
Igors, если меня не подводит мой маразм, то вот ещё информация:
Вертикальная черта - это логическая операция ИЛИ.
Есть ещё & - операция И
Т.е. запись в командной строке:
команда1 & команда2
даёт следующее - если команда1 завершится неудачно, то вторая команда выполнятся не будет
команда1 | команда2
даёт следующее - если команда1 завершится неудачно, то вторая команда всё равно выполнится
В обоих случаях вывод первой команды в stdout будет подан на stdin второй команды
Записан
Юра.
mutineer
Гость
Re: Алхимия командной строки
«
Ответ #11 :
Июнь 07, 2013, 08:37 »
Цитата: lit-uriy от Июнь 07, 2013, 03:28
Igors, если меня не подводит мой маразм, то вот ещё информация:
Вертикальная черта - это логическая операция ИЛИ.
Есть ещё & - операция И
Т.е. запись в командной строке:
команда1 & команда2
даёт следующее - если команда1 завершится неудачно, то вторая команда выполнятся не будет
команда1 | команда2
даёт следующее - если команда1 завершится неудачно, то вторая команда всё равно выполнится
В обоих случаях вывод первой команды в stdout будет подан на stdin второй команды
Подводит - в баше вертикальная черта это пайп (перенаправление вывода одной команды на ввод другой). А логические операции осуществляются через && и ||
И в обоих случаях логических операций вывод обеих команд будет выдан на консоль, перенаправления не будет
З.Ы. Если мы говорим про bash, естественно
«
Последнее редактирование: Июнь 07, 2013, 08:42 от mutineer
»
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Алхимия командной строки
«
Ответ #12 :
Июнь 07, 2013, 12:40 »
Цитата: mutineer от Июнь 07, 2013, 08:37
З.Ы. Если мы говорим про bash, естественно:)
Неудобно спрашивать но все же
Кто там из них bash и "не bash" и в чем разница?
Записан
mutineer
Гость
Re: Алхимия командной строки
«
Ответ #13 :
Июнь 07, 2013, 12:50 »
Цитата: Igors от Июнь 07, 2013, 12:40
Цитата: mutineer от Июнь 07, 2013, 08:37
З.Ы. Если мы говорим про bash, естественно:)
Неудобно спрашивать но все же
Кто там из них bash и "не bash" и в чем разница?
Bash - интерпретатор командной строки. В популярных дистрибутивах является дефолтным. Именно он делает пайпы, перенаправления, подсказывает по табу и др. Есть и другие интерпретаторы, у них синтаксис логических операций может быть другим
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Алхимия командной строки
«
Ответ #14 :
Июнь 07, 2013, 14:00 »
Цитата: mutineer от Июнь 07, 2013, 12:50
Bash - интерпретатор командной строки. В популярных дистрибутивах является дефолтным. Именно он делает пайпы, перенаправления, подсказывает по табу и др. Есть и другие интерпретаторы, у них синтаксис логических операций может быть другим
Понял, спасибо
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...