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ę?

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.


-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 {} \;

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).


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}'

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/'

Świetny sposób na naukę Perla: P
nixpower
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.