Как вывести список файлов на основе соответствия только части их имени файла?

20816
user663724

У меня есть много файлов в папке, например

Kiran.txt Kiran1.txt Kiran221.txt Kiran144.txt Time.csv Timer.csv Timer2.csv Timer444.csv Timer266.csv Account.sh Account3.sh Account3333.sh Account3333.sh Account333333.sh 

Из этого каталога я хочу узнать, как я могу использовать grepдля отображения файлов на основе части их имени файла - например, те, которые начинаются с «Учетная запись» или те, которые заканчиваются на «.sh».

3
Спасибо @DMA, я просто собирался сделать то же самое, ты был на секунду быстрее. user663724, если у вас есть похожие вопросы, почему бы не сгруппировать их в один? slhck 12 лет назад 0
Хорошее редактирование, я думал, что сначала смотрю на другой вопрос, пока не понял, что название и содержание были изменены, чтобы сделать вопрос более полезным для более широкой аудитории. Joe Taylor 12 лет назад 0

4 ответа на вопрос

8
ajreal

Вы можете find

find -type f -name "Account*" 

Альтернатива 2 (это может включать и папку)

ls -1 Account* 

Альтернатива 3 (grep, это может включать и папку)

ls -1 | grep -E "^Account" 
Я предпочитаю `найти` :-) ajreal 12 лет назад 1
7
slhck

Используйте подстановочный знак ( что это за подстановочный знак? ):

ls *.sh 

*Будет соответствовать что - нибудь перед окончанием, .shчто вы хотите. Используйте другие lsпараметры для отображения, например, -lчтобы сделать длинный список. Смотрите man lsдля получения дополнительной информации о том, что вы можете сделать с ним.

Обратите внимание, lsчто здесь также будет указан любой каталог, заканчивающийся .shне только файлами.


Вы также можете использовать, findчтобы преодолеть эту проблему.

find . -type f -maxdepth 1 -name "*.sh" 

Эта команда перечисляет только «настоящие» файлы. Использование find - это то, что я бы порекомендовал, если вы захотите потом что-то сделать с найденными файлами. Вы можете сделать это с помощью -execопции .

Для ОП: Кроме того, вы также можете использовать? для одного персонажа, как в «hel? o», чтобы найти «привет» и «helwo» Sirex 12 лет назад 0
Я бы поставил кавычки вокруг `* .sh` в команде find, иначе оболочка развернет его до` find. -type f -maxdepth 1 -name Account.sh Account3.sh Account3333.sh Account333333.sh` в примере вопроса. BennyInc 12 лет назад 1
@BennyB Правильно, забыл их при копировании. Спасибо! slhck 12 лет назад 0
3
Kilian Foth

Стандартным решением является труба:

ls | grep ^Account 

С чем-то таким простым, как «Файлы, начинающиеся с учетной записи», глобусы также будут работать:

ls Account* 

но в целом grep более мощный, и он не рискует переполнить максимальную длину командной строки, если ваша папка действительно, действительно заполнена.

3
Nirmal- thInk beYond

Используйте следующую команду

 ls *.sh 

Похожие вопросы