Выполните команды на скрытых файлах

Я выполняю команду для поиска фразы во всех файлах:

cat *.* | grep blabla

Это хорошо работает, но я получил проблему со скрытыми файлами и каталогами. Команда просто не имеет дело с ними. Ho для решения этой проблемы?

4
задан 21 January 2016 в 13:25

3 ответа

По умолчанию скрытые файлы (т.е. те, которые запускаются с периода), исключены из расширения шарика оболочки удара. Однако можно изменить то использование dotglob установка, например,

$ mkdir dir
$ touch dir/.hidden dir/visible

$ echo dir/*
dir/visible

$ shopt -s dotglob
$ echo dir/*
dir/.hidden dir/visible

можно сбросить опцию впоследствии с shopt -u dotglob

7
ответ дан 23 November 2019 в 11:40

"Скрытые файлы" являются просто файлами, имя которых запускается с точки. В приложениях графический интерфейсов пользователя эти файлы обычно не показывают, откуда их имя.

можно использовать globbing оболочки:

cat {*,.*} | grep blabla

предыдущая команда включает все файлы без точки (*) и все файлы, которые запускаются с точки (.*).

Между прочим, это бесполезное использование кошки , и необходимо вместо этого записать команду как:

grep blabla {*,.*} 
3
ответ дан 23 November 2019 в 11:40

Использовать find команда с логическим ИЛИ флагом (-o ) и -exec . . .\+ флаг

 find . -maxdepth 1 \( -iname "*.*" -o -iname ".*"   \) -exec grep "MySearchTerm" {} \+ 

Объяснение:

  • find рекурсивная команда, которая ищет файлы в указанном каталоге. В этом случае это . текущий рабочий каталог.
  • -maxdepth флаг говорит нам оставаться только в текущем каталоге. Если Вы хотите пойти рекурсивно или указать, сколько подкаталогов к спуску, изменить 1 к количеству уровней Вы хотите пойти.
  • \( . . .\) часть предотвращает оболочку обработки что как подоболочка, довольно рассматривающая это как группировка аргументов find.
  • -iname флаги позволяют указывать для который имена файлов искать.
  • -o флаг скажет, находят для поиска файлов *.* или файлы, которые запускаются с продвижения точки, скрытых файлов.
  • -exec . . .{} структура позволяет выполнять определенную команду для работы на найденные файлы. \+ скажет find для взятия всех файлов в качестве аргументов в пользу команды, Вы хотите работать в этом случае grep.

Вот небольшой пример, где Вы видите SEARCHFILE.txt и .SEARCHFILE.txt оба найдены:

DIR:/xieerqi
skolodya@ubuntu:$ find . -maxdepth 1 \( -iname "*.*" -o -iname ".*"   \) -exec grep "HelloWorld" {} \+ 2>/dev/null           
./SEARCHFILE.txt:HelloWorld ! I'm found
./localDir.txt:HelloWorld.so
./localDir.txt:HelloWorld.c
Binary file ./2015-05-05-raspbian-wheezy.img matches
./.SEARCHFILE.txt:HelloWorld ! I'm found
3
ответ дан 23 November 2019 в 11:40

Другие вопросы по тегам:

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