У меня есть папка файлов с именем list20140801.txt list20140802.txt ....
Я пытаюсь сделать это
ls | sort | tail -3 | cat
Но он просто дает мне имена файлов, а не присматривает за ними.
По словам руководства cat
работа кошки заключается в следующем :
Объединить ФАЙЛ (ы) или стандартный ввод в стандартный вывод.
Нет никаких причин, по которым cat
должна рассматривать свой стандартный ввод как имена файлов. Что вам нужно
ls | сортировать | хвост -3 | кот ксаргс
вместо.
Обратитесь к справочной странице xargs
за дополнительной информацией: http://linux.about.com/library/cmd/blcmdl1_xargs.htm
Вывод ls
уже отсортирован по умолчанию так же, как sort
по умолчанию, поэтому sort
не требуется.
Наиболее распространенный способ передачи сгенерированного списка файлов в команду - использовать xargs
. Обратитесь к странице xargs
за подробностями, но в этом случае вам не нужны никакие опции. (xargs
может не делать то, что вы хотите, если у вас есть огромное количество файлов, но в большинстве распространенных случаев он работает без необходимости думать об этом.)
Версия tail
используемая в настоящее время во многих системах Linux, не принимает в качестве опции только -3
. Это требует, чтобы вы использовали -n3
.
Наконец, cat
в конце вашего конвейера не делает ничего полезного, поэтому ее тоже можно опустить.
Эта команда должна делать то, что вы хотите.
ls | xargs tail -n3
Обновить
Я только что прочитал ответ @ AtomicHeartFather и понял, что, возможно, поставил tail
с неправильной частью проблемы. В этом случае команда будет
ls | tail -n3 | xargs cat
что в значительной степени то, что написал AtomicHeartFather, за исключением sort
.