Доброго времени суток.
Помогите, пожалуйста новичку, разобраться, в чем основная разница между передачей результатов одной команды на другую через | и через exec. Мне казалось, что вроде бы понял, но попробовал запустить банальный поиск файлов определенного размера в системе:
find / -type f -size +1G
всё отработалось без вопросов, 4 файла было найдено. Дальше решил передать их на ls
find / -type f -size +1G | ls -lah
и получил целую простыню результатов из файлов по 70, 100 и т.д. кБ (!), и среди них ни одного, которые нашла первая часть поиска. Ведь конвейер должен был передать на ls свои, 4 файла, и дальнейшая работ ls должна была быть с ними?
А вот если сделать:
find / -type f -size +1G -exec ls -lah {} \;
то здесь все без вопросов, ls отработала как положено.
Кстати, если конвейер запускать через xargs, то тоже все отрабатывается нормально:
find / -type f -size +1G | xargs ls -lah
почему же
find / -type f -size +1G | ls -lah
выводит какую-то ересь, но не сообщает об ошибках, если на то пошло?
Помогите разобраться, пожалуйста