Bash 从长路径提取文件基本名称
Bash 从长路径提取文件基本名称
在bash中,我正在尝试从目录中联通一组文件来作为程序输入,但我还想把这个文件列表提供给这个程序
files="/very/long/path/to/various/files/*.file"
这样我就可以像这样使用它。
prompt> program -files $files -names $namelist
如果glob
给我:
/very/long/path/to/various/files/AA.file /very/long/path/to/various/files/BB.file /very/long/path/to/various/files/CC.file /very/long/path/to/various/files/DD.file /very/long/path/to/various/files/ZZ.file
我希望获取AA BB CC DD ZZ列表,以便将其提供给我的程序,而不包括长路径名和文件扩展名。 但我没有头绪!任何提示将不胜感激!
admin 更改状态以发布 2023年5月22日
使用basename
命令解决您的问题
for file in $files do file_name=$(basename $file) file_name_witout_ext=${file_name%.file} done
编辑(提取无扩展名文件名的通用方法)
for file in $files do file_name=$(basename $file) file_name_witout_ext=${file_name%.*} done
另一种情况是文件名可能像“archive.tar.gz”一样。在这种情况下,您将有两个(或多个)扩展名。然后,您可以使用更贪婪的运算符。
for file in $files do file_name=$(basename $file) file_name_witout_ext=${file_name%%.*} done