Znajdź nazwy plików wykonywalnych bez ścieżki

9

Mam folder z wieloma plikami wykonywalnymi i chcę pominąć ścieżkę w wynikach polecenia find. to polecenie pokazuje pliki, które chcę zobaczyć, ale także wyświetla ścieżkę; Chcę tylko nazwę pliku.

find /opt/g09 -maxdepth 1 -executable

Jak mogę uzyskać wynik działania polecenia find, aby wyświetlać tylko nazwy plików, a nie pełną ścieżkę?

j0h
źródło

Odpowiedzi:

10

Albo użyj:

find /opt/g09 -maxdepth 1 -executable -printf "%f\n"

dodanie -type fflagi również działa tutaj.

Z findinstrukcji:

 %f     File's name with any leading directories removed (only the last element).

Ta odpowiedź wymaga tylko posiadania GNU, findpodczas gdy inne wymagają innych programów do manipulowania wynikami.

nixpower
źródło
-typ f To właśnie chciałem wymyślić! Dziękuję kodowaniu człowieku!
j0h
@ j0h to nie problem!
nixpower
6

Użyj basename:

find /opt/g09 -maxdepth 1 -executable -exec basename {} \;

Od man basename:

Print NAME with any leading directory components removed.

Próbujesz również findwszystkiego, aby ograniczyć wyszukiwanie tylko do plików, użyj:

find /opt/g09 -type f -maxdepth 1 -executable -exec basename {} \;
heemayl
źródło
3

Najbardziej oczywistym rozwiązaniem jest dla mnie

(cd /opt/g09; find -maxdepth 1 -executable)

Ponieważ uruchamiasz podpowłokę, pozostajesz w tym samym katalogu. Zaletą tej metody jest to, że nie trzeba jej analizować. Wadą jest to, że uruchamiasz podpowłokę (jednak tego nie poczujesz).

Bernhard
źródło
1
To sprytny pomysł.
AB
1

Za pomocą awk, dzieląc ścieżkę przez ogranicznik /, wypisz ostatnią sekcję ( $NF):

find /opt/g09 -maxdepth 1 -executable | awk -F/ '{print $NF}'
Jacob Vlijm
źródło
Gdzie jest twoja wersja brachu? ;)
Sergiy Kolodyazhnyy
@Serg haha, musiałem zawiązać palce :)
Jacob Vlijm
1

Korzystanie z kombinacji findiperl

find /opt/g09 -maxdepth 1 -type f -executable | perl -pe 's/.+\/(.*)$/\1/'
AB
źródło
Świetny sposób na naukę Perla: P
nixpower