Как сопоставить скрытые файлы внутри данных каталогов
например
Если я дам команду ниже, это не даст результат скрытых файлов,
du -b maybehere*/*
как добиться этого просто с помощью одной команды вместо использования
du -b maybehere*/.* maybehere*/*
как мне нужно напечатать, может быть, здесь дважды.
maybehere*/.*
и добавь к вышесказанному для всехОтветы:
Воспользуйтесь расширением скобок:
или в качестве альтернативы
Логика этого, вероятно, не очевидна, поэтому вот объяснение:
*
соответствует всем не скрытым файлам.[^.]
сопоставляет файлы, имена которых начинаются с одной точки, за которой не следует точка; это только 2-х символьные имена файлов в первой форме..??*
соответствует скрытым файлам длиной не менее 3 символов..?*
как и выше, но второй символ должен быть точкойВесь смысл в том, чтобы исключить жесткие ссылки на текущий и родительский каталог (
.
и..
), но включить все обычные файлы таким образом, чтобы каждый из них был засчитан только один раз!Например, самым простым было бы просто написать
Это означает, что список содержит точку
.
и «ничто» (ничто не находится между,
и закрывается}
), поэтому все скрытые файлы (которые начинаются с точки) и все не скрытые файлы (которые начинаются с «ничего») будут совпадать. Проблема в том, что это также будет соответствовать.
и..
, и это, скорее всего, не то, что вы хотите, поэтому мы должны как-то исключить это.Последнее слово о расширении скобок.
Расширение скобок - это механизм, с помощью которого вы можете добавить больше файлов / строк / чего угодно в командную строку, написав меньше символов. Синтаксис
{word1,word2,...}
, то есть это список строк, разделенных запятыми, который начинается{
и заканчивается на}
.bash
Руководство дает очень простой и в то же время очень распространенный пример использования:источник
{ }
я понятия не имею :( можете ли вы дать мне направление, чтобы получить больше информации об этомman bash
главу «Расширение скобок »..??*
не соответствует.a
,.b
....[^.]*
не соответствует..foo
..foo
соответствует как.[^.]*
и.??*
. Вы хотите{.[!.],..?,}*
.Поскольку вы уже используете специальный синтаксис GNU (
-b
):Таким образом, это
du
список файлов вmaybehere*
каталогах (и это не исключает точечные файлы).-d1
ограничивает отчеты об использовании диска на один уровень ниже (включая не каталоги с-a
).В противном случае для включения в глобусы скрытых файлов (кроме
.
и..
) каждая оболочка имеет собственный синтаксис:zsh
:ksh93
:bash
:tcsh
:yash
:хотя остерегайтесь, что он включает
.
и..
в системах, которые включают их, в результатеreaddir()
чего его вряд ли можно использовать.источник
Другой вариант доступен здесь :
источник
..
?../
и ниже...myfile
; добавить..?*
за это. Но +1 за использование правильного синтаксиса glob для отрицательных совпадений.Если вы хотите просто перечислить скрытые каталоги или работать со скрытыми каталогами, то, как сказал Костас, вы можете использовать
du -b maybehere*/.*
Это позволит вам работать со скрытыми файлами и каталогами. Если вам нужны только скрытые каталоги, вы можете указать это с помощью
du -b maybehere*/.*/
источник
maybehere*/.*
иmaybehere*/*
один из скрытых, а другой - для скрытыхdu -b
подбирает как скрытые, так и не скрытые.Хотя это и не оболочка напрямую, вы можете использовать find с ограниченной глубиной, как это
источник