Sia*_*ian 11 unix linux bash shell sh
我有一个目录(带子目录),我想找到所有扩展名为".ipynb"的文件.但我希望'find'命令只返回这些没有扩展名的文件名.
我知道第一部分:
find . -type f -iname "*.ipynb" -print
Run Code Online (Sandbox Code Playgroud)
但是,如何在没有"ipynb"扩展名的情况下获取名称?任何回复都非常感谢...
ken*_*orb 10
要仅返回没有扩展名的文件名,请尝试:
find . -name "*.ipynb" -execdir sh -c 'printf "%s\n" "${0%.*}"' {} ';'
Run Code Online (Sandbox Code Playgroud)
要么:
find "$PWD" -type f -iname "*.ipynb" -execdir basename {} .ipynb ';'
Run Code Online (Sandbox Code Playgroud)
要么:
find . -type f -iname "*.ipynb" -exec basename {} .ipynb ';'
Run Code Online (Sandbox Code Playgroud)
然而,调用basename
每个文件可能效率低下,所以@CharlesDuffy建议是:
find . -name '*.ipynb' -exec bash -c 'printf "%s\n" "${@%.*}"' _ {} +
Run Code Online (Sandbox Code Playgroud)
使用+
意味着我们将多个文件传递给每个bash实例,因此如果整个列表适合单个命令行,我们只调用bash一次.
要在同一行中打印完整路径和文件名(不带扩展名),请尝试:
find . -name "*.ipynb" -exec sh -c 'printf "%s\n" "${0%.*}"' {} ';'
Run Code Online (Sandbox Code Playgroud)
要么:
find "$PWD" -type f -iname "*.ipynb" -print | grep -o "[^\.]\+"
Run Code Online (Sandbox Code Playgroud)
要在单独的行上打印完整路径和文件名:
find "$PWD" -type f -iname "*.ipynb" -exec dirname "{}" ';' -exec basename "{}" .ipynb ';'
Run Code Online (Sandbox Code Playgroud)
这是一个简单的解决方案:
find . -type f -iname "*.ipynb" | sed 's/\.ipynb$//1'
Run Code Online (Sandbox Code Playgroud)
我在 bash oneliner 中发现了这个,它简化了过程而不使用 find
for n in *.ipynb; do echo "${n%.ipynb}"; done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13031 次 |
最近记录: |