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