2

У меня есть папка файлов с именем list20140801.txt list20140802.txt ....

Я пытаюсь сделать это

ls | sort | tail -3 | cat

Но он просто дает мне имена файлов, а не присматривает за ними.

2 ответа2

2

По словам руководства cat работа кошки заключается в следующем :

Объединить ФАЙЛ (ы) или стандартный ввод в стандартный вывод.

Нет никаких причин, по которым cat должна рассматривать свой стандартный ввод как имена файлов. Что вам нужно

ls | сортировать | хвост -3 | кот ксаргс

вместо.

Обратитесь к справочной странице xargs за дополнительной информацией: http://linux.about.com/library/cmd/blcmdl1_xargs.htm

0

Вывод ls уже отсортирован по умолчанию так же, как sort по умолчанию, поэтому sort не требуется.

Наиболее распространенный способ передачи сгенерированного списка файлов в команду - использовать xargs . Обратитесь к странице xargs за подробностями, но в этом случае вам не нужны никакие опции. (xargs может не делать то, что вы хотите, если у вас есть огромное количество файлов, но в большинстве распространенных случаев он работает без необходимости думать об этом.)

Версия tail используемая в настоящее время во многих системах Linux, не принимает в качестве опции только -3 . Это требует, чтобы вы использовали -n3 .

Наконец, cat в конце вашего конвейера не делает ничего полезного, поэтому ее тоже можно опустить.

Эта команда должна делать то, что вы хотите.

ls | xargs tail -n3

Обновить

Я только что прочитал ответ @ AtomicHeartFather и понял, что, возможно, поставил tail с неправильной частью проблемы. В этом случае команда будет

ls | tail -n3 | xargs cat

что в значительной степени то, что написал AtomicHeartFather, за исключением sort .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .