Jak uzyskać tylko nazwy z polecenia find bez ścieżki


14

Próbuję uzyskać tylko nazwy z wyniku wyszukiwania za pomocą funkcji find, ale zawsze zawiera również katalogi. Jak mogę wydrukować tylko nazwy (lub przypisać do zmiennej) za pomocą funkcji find

find trunk/messages/ -name "*.po" -printf '%f\n'

podobne polecenie, aby przypisać to do zmiennej, np. „zasób”, aby użyć go później.

EDYCJA: I jeśli to możliwe, tylko nazwa z wyłączeniem rozszerzenia.

Odpowiedzi:


20

Posługiwać się find trunk/messages/ -name "*.po" -exec basename {} .po \;

Przykład i wyjaśnienia:

Utwórz kilka plików testowych:

$ touch test1.po  
$ touch test2.po  
$ find . -name "*.po" -print
./test1.po  
./test2.po

Ok, znaleziono pliki, w tym ścieżkę.

Dla każdego wyniku wykonaj basenamei usuń część .po nazwy

$ find . -name "*.po" -exec basename \{} .po \;  
test1  
test2

Wielkie dzięki :). Czy mogę usunąć tylko rozszerzenie PO z katalogu? Mam na myśli: dir1 / po1.po i dir2 / po2.po czy można je otrzymać jak dir1 / po1 i dir2 / po2?
pobudka

@ user1754665find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
slhck

@slhck dzięki. wreszcie muszę pobrać nazwę pliku bez rozszerzenia i ostatni folder, w którym się znajduje: np .: katalog1 / katalog_1 / katalog_1 / po1.po i katalog2 / katalog_2 / katalog_2 / po2.po powinny mieć zmienną taką jak: katalog_1 / katalog1 odpowiednio subsubdir2 / po2.
pobudka

@ user1754665 Hmm, możefind . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
slhck

@Hennes Jaki jest cel odwrotnego ukośnika przed otwierającym nawias klamrowy w ostatnim find?
Utku


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.