如何使用 BASH 将文件名中的“A”Train.flac 更改为“A”Train?

如何使用 BASH 将文件名中的“A”Train.flac 更改为“A”Train?

我尝试了所有反斜杠、星号和花括号的组合,但似乎都不起作用。我正在使用 OS X 中的终端,如果有人能指导我,我将不胜感激。

答案1

您可以使用$()任务tr进行转换,然后在第二步中删除文件扩展名。它看起来类似于:

# Say FNAME is the variable that stores your original file name
# Convert the double quotes to single quotes:
SQFNAME=$(echo $FNAME|tr '""' "''")
# or, as an alternative in pure Bash (mind the shell character escaping):
SQFNAME=echo ${FNAME//\"/\'}
# then simply strip the extension
NEWFNAME=${SQFNAME%.flac}
# or, if you wanted to remove the extension delimited by the _last_ dot
NEWFNAME=${SQFNAME%.*}
# or, if you wanted to remove the extension delimited by the _first_ dot
NEWFNAME=${SQFNAME%%.*}

转换后的“新”文件名NEWFNAME现在将位于变量中。


概念证明:

#!/usr/bin/env bash
FNAME="\"A\" Train.flac"
echo "Unchanged name: $FNAME"
SQFNAME=${FNAME//\"/\'}
echo "Converted quotes: $SQFNAME"
NEWFNAME=${SQFNAME%.flac}
echo "New file name: $NEWFNAME"

执行结果:

$ bash test.sh
Unchanged name: "A" Train.flac
Converted quotes: 'A' Train.flac
New file name: 'A' Train

答案2

我将使用prename大多数 Perl 安装附带的 Perl 脚本(rename例如链接到基于 Debian 的发行版,但在 Fedora 等上rename存在另一个脚本,因此如果您不确定,请先研究情况,或者只需使用prename如下所示):

prename 's/"/'\''/g' \"A\"\ Train.flac

合适的工具,合适的工作。

为了获得文字',我首先停止当前的引用环境,然后转义',然后再次启动引用环境。


我猜你并不真的想去掉文件扩展名,而且这个问题的措辞也比较含糊,但如果你这么做的话:

prename 's/"/'\''/g; s/\..*$//' \"A\"\ Train.flac

或者

prename 's/"/'\''/g; s/\.flac$//' \"A\"\ Train.flac

-n如果您想预先测试命令,请使用开关仅查看更改而不应用它们。

相关内容