Zde je jednoduché řešení:
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Chcete-li vrátit pouze názvy souborů bez přípony, zkuste:
find . -type f -iname "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
nebo (s vynecháním -type f
od nynějška) :
find "$PWD" -iname "*.ipynb" -execdir basename {} .ipynb ';'
nebo:
find . -iname "*.ipynb" -exec basename {} .ipynb ';'
nebo:
find . -iname "*.ipynb" | sed "s/.*\///; s/\.ipynb//"
nicméně vyvolání basename
na každém souboru může být neefektivní, takže návrh @CharlesDuffy je:
find . -iname '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
nebo:
find . -iname '*.ipynb' -execdir basename -s '.sh' {} +
Chcete-li vytisknout úplnou cestu a název souboru (bez přípony) na stejný řádek, zkuste:
find . -iname "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
nebo:
find "$PWD" -iname "*.ipynb" -print | grep -o "[^\.]\+"
Chcete-li vytisknout úplnou cestu a název souboru na samostatné řádky:
find "$PWD" -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'