grep - это скорее фильтрация по содержимому, а не сортировка. Для сортировки мы юзаем sort обычно...
@mithlars5 жыл бұрын
прямо не скорее, а так и есть.
@ainurkhairullin6723 Жыл бұрын
grep ищет подстроку в строке
@EugeneNuke8 жыл бұрын
Про xargs наврал и не привёл самые распространенные примеры. Вкратце, если find -name "*.txt" выведет 3 файла: 1.txt 2.txt 3.txt то find -name "*.txt" | xargs rm будет прямым эквивалентом команды rm 1.txt 2.txt 3.txt т.е. rm будет выполнена 1 раз, а не "построчно" как сказано в видео. Во-вторых, если имя файла содержит пробел - этот номер не пройдёт. В-третьих, длина команды и её аргументов ограничена(MAX_ARGS) и команда xargs позволяет обойти это ограничение. Грубо говоря, если в выше приведённом примере find находит не 3 файла, а миллион(M), то он вызовет команду не миллион раз, а M/MAX_ARGS раз, т.е. значительно меньше раз будет вызвана команда.
@KirillSemaev8 жыл бұрын
Отлично, действительно соврал, меня не так учили, а на такой важный нюанс внимания не обратил, правлю поверх видео. Спасибо!
@fedorovnikolay80333 жыл бұрын
Но при этом find . -name "*.txt" | xargs -I {} echo {} '---' ./lpic_1-101/homework/103_5_dz.txt --- ./lpic_1-101/homework/104_4_dz.txt --- ./lpic_1-101/homework/102_5_dz.txt --- ./lpic_1-101/homework/102_3_dz.txt ---
@vesh956 жыл бұрын
Ну тут не по именам лучше, а по датам так искать 10:00 Ибо rm, на сколько я помню, сам умеет звездочки обрабатывать
@vokalengeers44864 жыл бұрын
Объясните. Есть возможность скомбинировать команды tee и grep? Записать отфильтрованные данные в файл через grep и с помощью tee вывести на экран?
@DaggerPoison7 жыл бұрын
Почему нельзя просто сделать find . -name "*.txt" | rm -rf ?
@valeriytyutyunnik4 жыл бұрын
Ключ -f глушит весь вывод. Без него в таком виде rm вернет ошибку об отсутствующем аргументе можно вызвать вовсе без find rm -rf *.txt
@Rogov_Oleg3 жыл бұрын
Это учебный пример. Он мог ещё проще rm -rf *.txt
@Ed-Bubble9 жыл бұрын
На 03:15 при записи ls>list.txt в новый файл записывается также имя нашего нового файла - list.txt. Это что же получается, > опережает время и берет список из будущего?) как этого избежать? недавно сам с этим столкнулся, когда создавал txt со списком файлов, пришлось заходить и вручную удалять эту лишнюю строчку
@KirillSemaev9 жыл бұрын
+Eduard Bulatov ну это же не совсем из будущего)) На тот момент что вы смотрите в файл он уже находится в папке, поэтому его содержимое справедливо. Хотя конечно понимаю, в момент выполнения команды ls файла еще не было, я как-то на это никогда не обращал внимания) Можно написать скрипт простой, или функцию, которая будет выполнять тот же самый ls в файл 123213213213.txt, например, а потом находить в созданном файле эту строку "123213213213.txt" и удалять её
@Ed-Bubble9 жыл бұрын
+Kirill Semaev спасибо, Кирилл! Классные уроки, так держать
@EugeneNuke8 жыл бұрын
Если совсем правильно, то перенаправлением потоков () занимается ваша оболочка (bash), она же вызывает набранные вами команды. Сначала происходит перенаправление (и создание файла), а потом вызов команды ls.
@KirillSemaev8 жыл бұрын
А почему сначала происходит перенаправление?
@EugeneNuke8 жыл бұрын
Оболочка (bash) обрабатывает всё что вы ему вводите с клавиатуры. Символы перенаправления - это указание для оболочки а не для команды. Команда вообще не в курсе что вы что-то изменили, она как читала со стандартного ввода, так и читает (или пишет в стандартный вывод). Вы просто изменили сам стандартный ввод/вывод на что-то другое (изменили значения "файловых" дескрипторов стандартных потоков на другие "файлы"). Соответственно, bash перед вызовом команды подготавливает её окружение - меняет значения перенаправленных дескрипторов на указанные, создаёт файлы, если их нет (чтобы получить файловый дескриптор) а затем выполняет команду.
@АлександрГаврилов-д6ж5 жыл бұрын
А как сделать перемещение, найденных файлов командой find через конвейер с использованием xargs? в этом случае нужно команде mv уже 2 аргумента вместо одного для команды rm
@KirillSemaev5 жыл бұрын
не понимаю, вы их хотите в разные места двигать? Дайте пример
@АлександрГаврилов-д6ж5 жыл бұрын
@@KirillSemaev просто вместо команды rm попробуйте применить команду mv в той же связке.
@Rogov_Oleg3 жыл бұрын
for по моему опыту существенно практичнее, чем xargs
@Ed-Bubble9 жыл бұрын
Еще один вопросик - понятно что значит
@EugeneNuke8 жыл бұрын
@KirillSemaev8 жыл бұрын
Опять ютуб не оповестил о комменте(( Евгений ответил, ему - спасибо!
@KirillSemaev8 жыл бұрын
Я кстати так и не смог найти нормальное описание всех этих символов, может вы подскажете где их искать? Например тут ru.wikipedia.org/wiki/Bash уже даже
@EugeneNuke8 жыл бұрын
triple less,
@EugeneNuke8 жыл бұрын
@lRickl8 жыл бұрын
Спасибо за урок! Вопрос по ДЗ: не разберусь как сделать это задание: 5) Вывести результат команды ping it-semaev.ru в консоль, отображая только последние пять символов каждой строки.. пните где искать ... Спасибо!
@KirillSemaev8 жыл бұрын
Ну можно попробовать так: stackoverflow.com/questions/9219964/bash-get-the-last-4-characters-of-output-from-standard-out-inline
@OpusPost8 жыл бұрын
Я сделал так ping -c 10 it-semaev.ru | rev | cut -c 1-5 | rev
@TyranRussian7 жыл бұрын
Вот еще так можно: ping -c 10 it-semaev.ru | awk '{ print substr( $0, length($0) - 4, length($0) ) }'
@sergeybarmaley125 Жыл бұрын
Жаль что раньше Я не видел твоих видосов !!! Другие показывают просто фуфло !!!
@vladimirkulakov8667 Жыл бұрын
я думал, зачем find . -name "*.txt" | xargs rm ... Ведь можно rm *.txt , но дело именно в количестве вызовов команды rm