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.
find . -name '*.po' -exec bash -c 'echo ${0%.po}' {} \;
find . -name '*.po' -type f -exec sh -c 'echo $(basename $(dirname $0))/$(basename $0)' {} \;
find
?Możesz użyć
-execdir
parametru, który wydrukuje plik bez ścieżki, np .:Pliki bez rozszerzeń:
Uwaga: Ponieważ nie jest to POSIX, BSD
find
wydrukuje czyste nazwy plików, jednak użycie GNUfind
spowoduje wydrukowanie dodatkowych./
.Zobacz: Dlaczego polecenie GNU find -execdir zachowuje się inaczej niż polecenie BSD find?
źródło
Na podstawie polecenia znalazłem tutaj: http://www.unixcl.com/2009/08/remove-path-from-find-result-in-bash.html
Możesz to zrobić za pomocą
sed
(który wykonał dla mnie szybciej, niżbasename
podejście):źródło