2013-02-26 2 views
2

Я знаю, что мне не хватает чего-то очевидного, и я уверен, что это связано с частью моего имени.Как найти файлы с именем «a»?

И это домашнее задание, но я думаю, что я довольно близко к правильному ответу. Лучшие способы письма всегда приветствуются!

find /home/caine/thecopy -user caine -size -10240c -name ^a.* | wc 

Это дает wc из 0 0 0, убрав выражение имя дает уйму подсчетов.

Я пробовал^a, '^ a', '^ a. *' И все придумали 0 результатов. Люди TIA. :)

ответ

4

Вам нужно обернуть имя файла:

find /home/caine/thecopy -user caine -size -10240c -name "a.*" | wc 
#              ^^
+0

Я думаю, что ему не нужно '^' (если только оно не является частью имени файла) – user000001

+0

+1, иначе выражение будет расширяться до имен файлов, начинающихся с 'a' в текущем рабочем каталоге. – jman

+0

Точно, @skjaidev. – fedorqui

2

Аргументом -name является шаблоном оболочки, не регулярного выражения. Символы ^ и . будут соответствовать буквам ^ и . символам, а не началу имени и любого символа соответственно, как если бы это было регулярное выражение.

Если вы хотите, чтобы соответствовать имена файлов, начинающиеся с 'a', это должно работать:

find /home/caine/thecopy -user caine -size -10240c -name 'a*' | wc 

Кавычки вокруг a* (либо одинарной или двойной) имеют важное значение; без них оболочка будет расширять шаблон до того, как find увидит его.

Если вы действительно хотите соответствовать регулярному выражению, вы можете заменить -name на -regex; это расширение, специфичное для GNU. Но в этом случае шаблон оболочки, вероятно, достаточно хорош.

Примечание: Я предполагаю, что вы хотите сопоставить файлы, имена которых начинаются с a; вы на самом деле так не говорили.

+0

Бинго! Да, я по-прежнему неправильно использую, где и когда использовать символы регулярного выражения. :/ Большое спасибо за помощь. :) – moominboy

+0

+1 для '-regex' – user000001

Смежные вопросы