Znajdź wszystkie katalogi zawierające określoną postać i wydrukuj je

7

Muszę znaleźć wszystkie katalogi zawierające określoną postać w ich nazwie i wydrukować je.

Więc jeśli mam katalogi:

abc cde fgh

I szukam „c”, powinienem uzyskać:

abc 
cde
Devid Demetz
źródło

Odpowiedzi:

15

Następujące polecenia wykonują wymagane zapytanie:

find -name "*c*" -type d
  • zaczyna się od bieżącego katalogu (w przypadku bieżącego katalogu nie trzeba określać katalogu)
  • -name "*c*" - z nazwą zawiera literę c
  • -type d - które są katalogiem

Możesz uruchomić polecenie w innym katalogu ( /full/path/to/dir), używając:

find /full/path/to/dir -name "*c*" -type d

Więcej informacji Polecenie znajdowania nixCraft

Yaron
źródło
2
Uwaga: w tym przypadku nie -printjest konieczne, jest to akcja domyślna. Ponadto, aby rozpocząć tylko od bieżącego katalogu, nie można podać ścieżki, ponieważ .jest to ścieżka domyślna. Dobra odpowiedź. Symbole wieloznaczne mogą być pułapką, jak w tym pytaniu , cytowanie ich jest tutaj bardzo ważne.
Kamil Maciorowski
@KamilMaciorowski - dzięki za komentarz
Yaron
@DevidDemetz - świetnie :-)
Yaron
Mam jeszcze pytanie. Jeśli id ​​teraz chce zmienić nazwę nazwy katalogu. jak „c”, którego szukałem, powinno stać się „a”. jak bym to zrobił
Devid Demetz
@DevidDemetz - jeśli masz nowe pytanie - jak 1) znaleźć katalogi z określonym wzorcem i 2) zamienić nazwę katalogów z określonym wzorcem - otwórz nowe pytanie w tym zakresie.
Yaron
1

Jeśli globstarjest włączony, możesz z niego korzystać

for d in **/*c*/; do echo $d; done

Pierwszy **będzie pasował do dowolnych ścieżek podkatalogu. Następnie *c*/z dopasowanymi folderami ze znakiem c

Jeśli nie jest włączony, możesz go włączyć za pomocą shopt -s globstar

  • globstar

    • Jeśli jest ustawiony, wzorzec **użyty w kontekście rozszerzenia nazwy pliku będzie pasował do wszystkich plików i zero lub więcej katalogów i podkatalogów. Jeśli po wzorcu występuje a /, tylko katalogi i podkatalogi są zgodne.
phuclv
źródło