Jak wyświetlić katalogi i dane wyjściowe w Bash

1

Chcę pobrać listę katalogów w folderze i wypisać listę do pliku wykonywalnego, który używa ich do uruchomienia czegoś.

Dość dużo, to bash plików wymaga listę folderów wewnątrz mojego $directory, które różnią się od @sub1, @sub2, @sub3, i czasami przejść całą aż do 30. Wszystkie foldery podrzędne są dołączane wraz z @symbolem.

Obecnie ręcznie dodaję podfoldery do mojej listy i wywoływany jest za pomocą -sub="$subs", gdzie sub zdefiniowano powyżej jako subs="$directory/@sub1;$directory/@sub2;... itd

Muszę zachować to samo formatowanie danych wyjściowych, aby zachować sposób, w jaki budowany jest plik wykonywalny.

Jak najlepiej to zautomatyzować? Przepraszam, jeśli to trochę dziwne, moje pierwsze pytanie tutaj.

Ksingh
źródło

Odpowiedzi:

1

Możliwe rozwiązanie: find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

Na początek pusty folder, kilka folderów o nazwie @subX, plik, którego nie chcemy.

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

Znalezienie rzeczy i wydrukowanie ich w standardzie, wykonanie czegoś z nimi i tym podobnych można zrobić find. Użyj tego zamiast próbować analizować wyjście ls.

Pierwszym argumentem jest folder do przeszukania (np. find .Dla bieżącego katalogu)

-type d filtry tylko do katalogów (bez plików)

-name '@*' dowolne dopasowanie, które zaczyna się od @

-print0wydrukuj wynik na standardowe wyjście. -print również będzie działał, ale -print0 robi specjalne rzeczy w przypadku spacji itp.

-maxdepth 1 Nie wyszukuj podfolderów)

Wynik find . -type d -name '@*' -print0 -maxdepth 1w konfiguracji z góry:

./@sub1./@sub2./@sub3

Uwaga: są one poprzedzone przez ./, co może być dla Ciebie problemem.

Warto również przeczytać: znajdź opcję -exec i znajdź ..... {} +;

Hennes
źródło
Przy odrobinie zmiany wokół wyjścia, zadziałało! Dziękuję Ci bardzo! Uratowałeś mnie wiele godzin.
Ksingh