Voici une solution simple :
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Pour renvoyer uniquement les noms de fichiers sans l'extension, essayez :
find . -type f -iname "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
ou (en omettant -type f
à partir de maintenant) :
find "$PWD" -iname "*.ipynb" -execdir basename {} .ipynb ';'
ou :
find . -iname "*.ipynb" -exec basename {} .ipynb ';'
ou :
find . -iname "*.ipynb" | sed "s/.*\///; s/\.ipynb//"
cependant invoquant basename
sur chaque fichier peut être inefficace, donc la suggestion de @CharlesDuffy est :
find . -iname '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
ou :
find . -iname '*.ipynb' -execdir basename -s '.sh' {} +
Pour imprimer le chemin complet et le nom du fichier (sans extension) sur la même ligne, essayez :
find . -iname "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
ou :
find "$PWD" -iname "*.ipynb" -print | grep -o "[^\.]\+"
Pour imprimer le chemin complet et le nom du fichier sur des lignes distinctes :
find "$PWD" -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'