Ecco una soluzione semplice:
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Per restituire solo nomi di file senza l'estensione, prova:
find . -type f -iname "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
o (omettendo -type f
d'ora in poi) :
find "$PWD" -iname "*.ipynb" -execdir basename {} .ipynb ';'
oppure:
find . -iname "*.ipynb" -exec basename {} .ipynb ';'
oppure:
find . -iname "*.ipynb" | sed "s/.*\///; s/\.ipynb//"
tuttavia invocando basename
su ogni file può essere inefficiente, quindi il suggerimento di @CharlesDuffy è:
find . -iname '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
oppure:
find . -iname '*.ipynb' -execdir basename -s '.sh' {} +
Per stampare il percorso completo e il nome del file (senza estensione) nella stessa riga, prova:
find . -iname "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
oppure:
find "$PWD" -iname "*.ipynb" -print | grep -o "[^\.]\+"
Per stampare il percorso completo e il nome del file su righe separate:
find "$PWD" -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'