Aquí hay una solución simple:
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Para devolver solo los nombres de archivo sin la extensión, intente:
find . -type f -iname "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
o (omitiendo -type f
de ahora en adelante) :
find "$PWD" -iname "*.ipynb" -execdir basename {} .ipynb ';'
o:
find . -iname "*.ipynb" -exec basename {} .ipynb ';'
o:
find . -iname "*.ipynb" | sed "s/.*\///; s/\.ipynb//"
sin embargo invocando basename
en cada archivo puede ser ineficiente, por lo que la sugerencia de @CharlesDuffy es:
find . -iname '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
o:
find . -iname '*.ipynb' -execdir basename -s '.sh' {} +
Para imprimir la ruta completa y el nombre del archivo (sin extensión) en la misma línea, intente:
find . -iname "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
o:
find "$PWD" -iname "*.ipynb" -print | grep -o "[^\.]\+"
Para imprimir la ruta completa y el nombre de archivo en líneas separadas:
find "$PWD" -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'