相关疑难解决方法(0)

在Bash中提取文件名和扩展名

我想分别获取文件名(没有扩展名)和扩展名.

我到目前为止找到的最佳解决方案是:

NAME=`echo "$FILE" | cut -d'.' -f1`
EXTENSION=`echo "$FILE" | cut -d'.' -f2`
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为如果文件名包含多个.字符,它将不起作用.如果,让我们说,我有a.b.js,它会考虑ab.js,而不是a.bjs.

它可以在Python中轻松完成

file, ext = os.path.splitext(path)
Run Code Online (Sandbox Code Playgroud)

但是如果可能的话,我宁愿不为此启动Python解释器.

有更好的想法吗?

string bash filenames

1969
推荐指数
26
解决办法
143万
查看次数

提取目录路径和文件名

我有一个变量,其中包含目录路径以及文件名.我想从Unix目录路径中单独提取文件名并将其存储在变量中.

fspec="/exp/home1/abc.txt"  
Run Code Online (Sandbox Code Playgroud)

unix shell

36
推荐指数
3
解决办法
16万
查看次数

Bash从长路径中提取文件基名

bash我尝试glob从目录中的文件列表,以作为程序的输入.但是,我还想给这个程序提供文件名列表

files="/very/long/path/to/various/files/*.file"
Run Code Online (Sandbox Code Playgroud)

所以我可以这样使用它.

prompt> program -files $files -names $namelist
Run Code Online (Sandbox Code Playgroud)

如果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
Run Code Online (Sandbox Code Playgroud)

我想获得AA BB CC DD ZZ的列表,以便在没有长路径名和文件扩展名的情况下提供我的程序.但是我不清楚如何从那里开始!任何提示非常感谢!

bash filenames glob

12
推荐指数
2
解决办法
3万
查看次数

如何将目录转换为字符串?

我已经symlink命名CURRENT为指向一个目录,可以说

CURRENT -> $HOME/local/java/jdk1.8.0
Run Code Online (Sandbox Code Playgroud)

我想将jdk1.8.0部分提取为字符串。

首先,我通过以下方式获取目录:

 current_dir= $(readlink -f $CURRENT)
Run Code Online (Sandbox Code Playgroud)

然后,我尝试提取路径的最后一部分:

last_part= ${current_dir##*/}
Run Code Online (Sandbox Code Playgroud)

或者甚至当我尝试通过以下方式打印它时:

echo $current_dir
Run Code Online (Sandbox Code Playgroud)

我收到此错误

bash: /home/tarrsalah/local/java/jdk1.8.0: Is a directory
Run Code Online (Sandbox Code Playgroud)

如何将目录转换为字符串?

unix bash shell

2
推荐指数
1
解决办法
4398
查看次数

shell 脚本中的 Basename 命令

我正在尝试将以下内容作为应用程序启动脚本的一部分运行:

for file in $TEMPLATE_FOLDER/*
do
    filename='basename $file'
    echo "Processing $filename"

    if [ -f "$CONF_FOLDER/$filename" ]
    then
        echo "Using existing $filename"
    else
        echo "Creating $filename from template $file"
        cp $file $CONF_FOLDER
    fi
done
Run Code Online (Sandbox Code Playgroud)

但输出是:

Processing basename $file
Creating basename $file from template ../conf/templates/conf-TEST/log4j.xml
Run Code Online (Sandbox Code Playgroud)

basename 命令不会被评估,只是被打印出来。

当我从提示符运行命令时,它工作正常。

bash 版本:

bash -version
GNU bash, version 3.00.16(1)-release (sparc-sun-solaris2.10)
Copyright (C) 2004 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

谁能看到我做错了什么?

谢谢!

unix shell scripting

2
推荐指数
1
解决办法
3万
查看次数

标签 统计

bash ×3

shell ×3

unix ×3

filenames ×2

glob ×1

scripting ×1

string ×1