Hier ist eine einfache Lösung:
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Um nur Dateinamen ohne die Erweiterung zurückzugeben, versuchen Sie:
find . -type f -iname "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
oder (ohne -type f
ab sofort) :
find "$PWD" -iname "*.ipynb" -execdir basename {} .ipynb ';'
oder:
find . -iname "*.ipynb" -exec basename {} .ipynb ';'
oder:
find . -iname "*.ipynb" | sed "s/.*\///; s/\.ipynb//"
jedoch Aufruf von basename
auf jeder Datei kann ineffizient sein, daher ist der Vorschlag von @CharlesDuffy:
find . -iname '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
oder:
find . -iname '*.ipynb' -execdir basename -s '.sh' {} +
Um den vollständigen Pfad und Dateinamen (ohne Erweiterung) in derselben Zeile auszugeben, versuchen Sie:
find . -iname "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
oder:
find "$PWD" -iname "*.ipynb" -print | grep -o "[^\.]\+"
So drucken Sie den vollständigen Pfad und den Dateinamen in separaten Zeilen:
find "$PWD" -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'