终端-根据通配符重命名文件

终端-根据通配符重命名文件

我有一个场景,文件夹中有两个文件:

1)Foo bar.pdf

2)另一个文件.pdf

我正在将两个文件合并为一个。生成的文件必须命名为“Foo.pdf”。

因此.sh 文件将包含以下函数:

检查*.pdf 是否包含“bar”//检查文件夹中所有 PDF 的文件名中是否包含单词“bar”。

如果为 TRUE ($value = "Foo.pdf")//从文件名中提取“Foo”

mkfile = $value.pdf

因此,我最终会得到如下结果:

(目录 1)

文件 1:Foo Blah Blah 123.pdf

文件 2:另一个文件.pdf

...运行脚本...

文件 3:Foo.pdf//创建文件

希望这有意义?有人能给我指出正确的方向吗?

答案1

以下是一种方法:

for FILE in *bar.pdf; do
    NEWNAME=$(echo $FILE | sed -En 's/(.*)bar.pdf/\1.pdf/p')
    mv $FILE $NEWNAME
done

解释:这使用 的bashfor 循环语法和 shell 通配符(基于通配符的文件名匹配)来处理以“bar.pdf”结尾的每个文件。它获取每个文件的名称并将其发送到sedsed被告知记住文件名中“bar.pdf”之前的部分,然后用记住的部分替换文件名,并在末尾附加“.pdf”。该新文件名存储为 NEWNAME。然后mv调用 以将文件重命名为新名称,循环继续处理下一个文件(如果还有其他文件与 *bar.pdf 匹配)。

(使用 macOS High Sierra 10.13.6 的内置bash和进行测试sed。您的系统工具可能会有所不同。我很确定sedLinux 中的 GNU 使用与 macOS 中基于 BSD 的命令行选项不同的命令行选项sed,因此请先检查您当地的sed手册页。)

相关内容