[BASH] Lista plików w osobnych wierszach ze ścieżkami względnymi

0

Od jakiegoś czasu męczę basha (ogólnie Linuksa), żeby znaleźć sposób na wyświetlenie najzwyklejszej listy wszystkich plików. Próbowałem już różnych kombinacji z użyciem ls, find i różnych połączeń w potoku, ale nie mogę uzyskać czegoś tak prostego za pomocą niezbyt skomplikowanej jednowierszowej komendy basha. Dodam, że w tym "znienawidzonym" dosie i windzie załatwia się ten problem przez proste dir /s/b. Oczywiście mogę sobie sklecić program w jakimś języku (c/java/whatever), ale w celu uzyskiwania tak prostych rzeczy wymyślono skrypty.
Polecenie ls produkuje albo mnóstwo niepotrzebnych do tego celu informacji, albo w złym formacie; find uszczęśliwia za to wierszami zawierającymi katalogi (a rzekomo miał znajdować pliki...). Wszystko okraszone 40-letnim totalnym bajzlem w opcjach. Z powodu takich pierdół wciąż podchodzę do basha (i ogólnie Unixa/Linuxa) jak pies do jeża. Jakiś pomysł?

0

O to chodzi ?

for i in *; do echo $i; done

przed gwiazdka mozesz dodac sciezke, np /root/*

0

Zapomniałem dopisać, że chodziło o listę plików z całego drzewa, a nie z jednego katalogu. Dla uproszczenia zaczynając choćby od bieżącego katalogu. Gdyby bawić się z for, to chyba bez podwójnej pętli nie obędzie się.

0

ls * w katalogu, ktorego drzewo chcesz obejrzec

0

OK, nie jestem początkującym, a mój problem jest ściśle określony. Kombinuję jak stworzyć listę wszystkich plików z całego drzewa z kolejnymi pozycjami będącymi ścieżkami względnymi od katalogu będącego korzeniem przeszukiwania. W pliku tym nie może być żadnych "śmieci" - tylko czyste ścieżki. Mogą być nawet absolutne bo te sobie poleceniem "cut" obetnę do względnych. Użyłbym do tego "find .", ale to polecenie produkuje na liście również nazwy katalogów, które nie są plikami. Dla konkretnych plików np. *.class mam dobrze działające polecenie "find . -print|grep '.class'|cut -b 1-2 --complement", ale jeżeli usunę grepa, to dostaję listę plików, ścieżki do katalogów, a sprawę utrudnia jeszcze istnienie tam (poprawnych) plików bez żadnych rozszerzeń, których nazwy nie różnią się z wyglądu niczym od nazw katalogów. Dlatego nie mogę odfiltrować katalogów od wszystkich innych plików po nazwach. Ta informacja jest gubiona już przez find. Na liście nie mogą też być żadne puste wiersze - nic poza ścieżkami do plików. Ewentualne sortowanie listy plików nie ma znaczenia. Jakoś nie chce mi się wierzyć aby coś tak podstawowe zadanie powodowało taką trudność zapisania tego w bashu.

1
for i in `find ./`; do if [ -f "$i" ]; then echo "$i"; fi; done

dodano:
w sumie tworcy find przewidzieli Twoj problem i wymyslili cos takiego

find ./ -type f
0

To podane na końcu rzeczywiście działa tak jak oczekiwałem. Ostatecznie uzyskałem listę ścieżek (względnych do bieżącego katalogu) jako polecenie "find ./ -type f|cut -b 1-2 --complement". Dzięki za pomoc.
Szkoda, że interfejs poleceń Linuxa łamie zasadę KISS.

0

Osobiscie polecam polecenie tree ;p

Olamagato napisał(a):

To podane na końcu rzeczywiście działa tak jak oczekiwałem. Ostatecznie uzyskałem listę ścieżek (względnych do bieżącego katalogu) jako polecenie "find ./ -type f|cut -b 1-2 --complement". Dzięki za pomoc.
Szkoda, że interfejs poleceń Linuxa łamie zasadę KISS.

1 użytkowników online, w tym zalogowanych: 0, gości: 1