Jak dopasować ukryte pliki w podanych katalogach
na przykład
Jeśli podam poniższe polecenie, nie podaje wyniku ukrytych plików,
du -b maybehere*/*
jak osiągnąć to proste za pomocą jednego polecenia zamiast użycia
du -b maybehere*/.* maybehere*/*
ponieważ muszę wpisać gdzieś dwa razy.
maybehere*/.*
i dołączyć do wszystkich dla wszystkichOdpowiedzi:
Skorzystaj z rozszerzenia nawiasu klamrowego:
lub alternatywnie
Logika tego prawdopodobnie nie jest oczywista, więc oto wyjaśnienie:
*
pasuje do wszystkich nie ukrytych plików.[^.]
dopasowuje pliki, których nazwy zaczynają się od pojedynczej kropki, po której nie następuje kropka; które są tylko 2 znakowymi nazwami plików w pierwszej formie..??*
dopasowuje ukryte pliki o długości co najmniej 3 znaków..?*
jak wyżej, ale drugi znak musi być kropkąChodzi o to, aby wykluczyć twarde linki do bieżącego i nadrzędnego katalogu (
.
i..
), ale dołączyć wszystkie normalne pliki w taki sposób, aby każdy z nich był policzony tylko raz!Na przykład najłatwiej byłoby po prostu napisać
Oznacza to, że lista zawiera kropkę
.
i „nic” (nic nie jest pomiędzy,
i zamykanie}
), więc wszystkie pliki ukryte (zaczynające się od kropki) i wszystkie pliki nie ukryte (które zaczynają się od „nic”) byłyby zgodne. Problem polega na tym, że to również pasuje.
i..
, i najprawdopodobniej nie jest to, czego chcesz, więc musimy jakoś to wykluczyć.Ostatnie słowo na temat rozszerzenia nawiasu klamrowego.
Rozwijanie nawiasów klamrowych to mechanizm, dzięki któremu możesz dołączyć więcej plików / ciągów znaków / cokolwiek do wiersza poleceń, pisząc mniej znaków. Składnia jest
{word1,word2,...}
, tzn. Jest to lista ciągów oddzielonych przecinkami, które zaczynają się{
i kończą}
.bash
instrukcja podaje bardzo prosty, a jednocześnie bardzo powszechny przykład użycia:źródło
{ }
Nie mam pojęcia :( czy możesz dać mi kierunek, aby uzyskać więcej informacji na ten tematman bash
rozdział „Brace Expansion”..??*
nie pasuje.a
,.b
....[^.]*
nie pasuje..foo
..foo
pasuje zarówno do, jak.[^.]*
i do.??*
. Chcesz{.[!.],..?,}*
.Ponieważ używasz już składni specyficznej dla GNU (
-b
):W ten sposób
du
wyświetla listę plików wmaybehere*
katalogach (i nie wyklucza plików kropek).-d1
ogranicza raportowanie użycia dysku do jednego poziomu w dół (włączając w to nie-katalogi z-a
).W przeciwnym razie, aby globusy zawierały ukryte pliki (oprócz
.
i..
), każda powłoka ma swoją własną składnię:zsh
:ksh93
:bash
:tcsh
:yash
:choć uwaga ta obejmuje
.
i..
na systemach, które je zawierają, w wynikureaddir()
czego jest to mało użyteczne.źródło
Inna opcja jest dostępna tutaj :
źródło
..
?../
dole i na dole...myfile
; dodaj..?*
do tego. Ale +1 za użycie właściwej składni globalnej dla dopasowań negatywnych.Jeśli chcesz po prostu wyświetlić listę ukrytych katalogów lub operować na ukrytych katalogach, to jak powiedział Costas, możesz użyć
du -b maybehere*/.*
To pozwoli ci operować ukrytymi plikami i katalogami. Jeśli chcesz tylko ukryte katalogi, możesz to określić za pomocą
du -b maybehere*/.*/
źródło
maybehere*/.*
imaybehere*/*
jednego ukrytego, a drugiego w przypadku ukrytegodu -b
odbiera zarówno ukryte, jak i ukryte.Chociaż nie jest to powłoka bezpośrednio, możesz użyć find z ograniczoną głębokością w ten sposób
źródło