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

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

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

  • Ubuntu 14.04 Скрипт HDMI UDev
  • Вставить в таблицу Oracle в цикле
  • base10 не работает
  • имя переменной echo для цикла
  • Сценарий оболочки Bash для удаления указателя в имени файла
  • Вставить
  • -r имя_файла &&. имя файла
  • команда find не дает никакого вывода
  • 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 /

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

    Interesting Posts

    Как интерпретировать использование памяти top / htop

    Является ли $ argv в рыбной оболочке отличной от $ @ в bash?

    Как использовать тройник для перенаправления на grep

    Как синхронизировать файлы между двумя дисками?

    автоматически запускать автоматический проходной туннель при появлении сети

    Попросить rsync создать * любые * необходимые каталоги

    Извлечение случайной выборки из N строк на основе шаблона

    Поддерживает ли Linux ThinkPad Helix 2?

    Почему массив пуст после цикла while?

    Как автоматически отключить клавиатуру / мышь ноутбука с помощью xinput, когда подключена внешняя клавиатура / мышь?

    Ubuntu Linux: копирование прав на файлы / папки с одной машины на другую

    Проблемы с Fedora 20 и шмелем

    Почему я не вижу данные inode в hexdump или dd?

    В Linux верхняя команда сортирует по полю «TIME +» с помощью командной строки, итерации 1 раз

    Является ли команда w безопасной для пользователей?

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