I have a directory (with subdirectories), of which I want to find all files that have a ".ipynb" extension. But I want the 'find' command to just return me these filenames without the extension.
I know the first part:
find . -type f -iname "*.ipynb" -print
But how do I then get the names without the "ipynb" extension? Any replies greatly appreciated...
Perl One Liner
what you want
find . | perl -a -F/ -lne 'print $F[-1] if /.*.ipynb/g'
Then not your code
what you do not want
find . | perl -a -F/ -lne 'print $F[-1] if !/.*.ipynb/g'
NOTE
In Perl you need to put extra
.
. So your pattern would be.*.ipynb
If there's no occurrence of this ".ipynb" string on any file name other than a suffix, then you can try this simpler way using
tr
:If you don't know that the extension is or there are multiple you could use this:
and for a list of files with no duplicates (originally differing in path or extension)
To return only filenames without the extension, try:
or:
or:
however invoking
basename
on each file can be inefficient, so @CharlesDuffy suggestion is:Using
+
means that we're passing multiple files to each bash instance, so if the whole list fits into a single command line, we call bash only once.To print full path and filename (without extension) in the same line, try:
or:
To print full path and filename on separate lines:
The -o flag outputs only the matched part. The -P flag matches according to Perl regular expressions. This is necessary to make the lookahead
(?=[.])
work.Here's a simple solution: