2016-02-03 3 views
0

Прежде, чем вы начнете говорить, что на это был дан ответ раньше, позвольте мне сказать, что я много искал и действительно не чувствовал, что на мой вопрос был дан ответ. Я не избегал поисков! Поэтому мне может быть трудно понять команды Linux, но я не избегал поиска. :) Хорошо теперь к моему вопросу.ls | grep -c и полный путь?

Могу ли я использовать ls | grep -c /full/path/to/file для подсчета вхождения файла, но при выполнении команды из другой директории, чем где находятся файлы, которые я ищу? Предположим, я хочу посмотреть, сколько txt-файлов у меня есть в моем каталоге «results», могу ли я сделать что-то вроде ls | grep -c /full/path/to/results/*.txt, пока я в другом каталоге?

Хотя у меня есть текстовые файлы в этом каталоге, я всегда получаю ноль при запуске команды из другой директории :(Что происходит? Могу ли я использовать только ls для текущего каталога?

+0

Вы можете передать родительский каталог в качестве параметра в команду ls (ls/parent/directory), или, может быть, я не получу то, что вы пытаетесь сделать –

ответ

0
  • Grep принимает регулярное выражение , а не шарик. /foo/bar/*.txt является Глоб, попробуйте /foo/bar/.*\.txt
  • также ls список файлов/каталоги под текущей директории, он не перечислить full path сделать несколько тестов, вы будете видеть это легко.
  • ls мАЕ вывода результатов в одна строка, это может привести к тому, что ваш grep -c даст правильный результат. Поскольку grep выполняет линейное сопоставление.
+0

@all Спасибо всем. К сожалению, я не могу найти решение, что бы я ни делал, это неправильно. Я пробовал все предлагаемое, и я всегда получаю ноль. ls дает синтаксическую ошибку независимо от того, какой синтаксис я использую. Спасибо вам всем за ваше время. – kouki

+0

это потому, что вы используете ls буквально. в командах означает действительное имя каталога, которое вы собираетесь заменить. в вашем случае вам нужно запустить эту команду 'ls /full/path/to/results/*.txt | grep -c \ .txt $ 'OR' ls /full/path/to/results/*.txt | wc -l' –

2

вы должны использовать ls <dirname>. Plain ls по умолчанию только для текущего каталога.

То, что вы пытаетесь сделать, может быть достигнуто путем find <dir> -name "*.txt" | grep -c txt или find <dir> -name "*.txt" | wc -l

Но вы можете сделать, а ls * | grep \.txt$. Пожалуйста, прочитайте руководство, чтобы найти различия.

:
+1

Я согласен, 'find' является правильным инструментом здесь, а не' ls'. –

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