Искать файлы ТОЛЬКО в подкаталоге

Итак, скажем, я хочу искать файлы, которые являются C-файлами. Как я могу их искать ТОЛЬКО в моих подкаталогах?

Я пробовал: ls -R | egrep .c$ ls -R | egrep .c$ , но также ищет файлы .c в моем текущем каталоге. Как отфильтровать файлы в текущем каталоге и заботиться только о них в моем подкаталоге?

  • Как определить, куда перенаправляется ссылка
  • Сценарий Bash с ssh, не возвращающим значение переменных
  • Как вызвать URL-адрес службы из сценария оболочки bash параллельно?
  • Как я могу разбить буквы слова с четырьмя буквами в строке?
  • Сохранить кешированное видео на firefox?
  • Печать полей с помощью awk
  • файл шаблона в качестве входа в RS, FS в awk / sed / grep для распознавания и добавления столбцов
  • Когда `ls -s` печатает" 0 "
  • 2 Solutions collect form web for “Искать файлы ТОЛЬКО в подкаталоге”

    Строго в подкаталогах,

     ls */*.c 

    Рекурсивно в подкаталогах подкаталогов,

     find */ -type f -name '*.c' -print 

    Вы можете использовать файловое globbing (то есть расширение звездочки) с find как triplee, говорит, конечно, но … эта команда заставила меня вздрогнуть.

    Когда вы используете команду find , у нее есть так много встроенных флагов, которые вы можете использовать, чтобы явным образом сказать, что вы хотите, чтобы не было причин использовать ls с файловым globbing. И есть много причин не делать этого. Например, файловое подкрашивание обычно игнорирует любые скрытые файлы или каталоги. Это означает, что любые файлы, имя которых начинается с точки или которые находятся в каталогах (или подкаталогах каталогов), имя которых начинается с точки, будут игнорироваться . Может быть, это то, что вы хотите, но с файловым глобусом это нелегко и прямо под вашим контролем; с find .

    Найти правильный инструмент для работы. Опция, которую вы хотите, это -mindepth . Используйте его так:

    find . -mindepth 2 -type f -iname '*.c'

    Это находит все файлы (не-каталоги, неспециальные файлы), которые находятся внутри каталога в текущем каталоге, или любое количество уровней вниз, чье имя заканчивается на .c или .C . (Флаг -iname означает игнорировать регистр.)

    (Обратите внимание, что это не будет следовать символическим ссылкам, это обычно так, как вы этого хотите, но вы можете проверить, что man find чтобы узнать, как настроить это поведение.)

    В качестве побочного элемента я также использовал ls piped для grep течение довольно долгого времени, прежде чем изучить команду find , но find действительно лучший метод. Я нашел, что практические команды, приведенные на этой ссылке, очень полезны в самом начале использования find в повседневной работе: http://www.thegeekstuff.com/2009/03/15-practical-linux-find-command-examples /

    Надеюсь это поможет. 🙂

    Linux и Unix - лучшая ОС в мире.