仅更改文件的扩展名

Cal*_*lat 9 scripting shell-script rename files mv

我正在编写一个简单的 shell 脚本来将文件更改one.PDFone.pdf. 我将此文件存储在名为 Task1 的文件夹中。

我的脚本与 Task1 位于同一目录中。Shell1.sh当我运行它时调用Task1 变为 Task1.pdf 但 one.PDF 中的文件不会改变。我反过来需要它,但我尝试的任何方法似乎都不起作用我一直在语法错误之间交替,mv 无法移动,因为资源繁忙或只是重命名目录。

谁能告诉我我做错了什么?

#!/bin/bash
#shebang for bourne shell execution
echo "Hello this is task 1"
 #Initial prompt used for testing to see if script ran
#/rename .* .pdf *.pdf // doesnt work

#loop to iterate through each file in current directory and rename
for file in Task1;
do
        mv "$file" "${file%.PDF}.pdf"
done
Run Code Online (Sandbox Code Playgroud)

hee*_*ayl 16

使用 globbing 获取文件名:

for file in Task1/*; do mv ...; done
Run Code Online (Sandbox Code Playgroud)

为了精确起见,只匹配以 结尾的文件.PDF

for file in Task1/*.PDF; do mv ...; done
Run Code Online (Sandbox Code Playgroud)

更准确地说,确保我们处理的是文件,而不是目录:

for file in Task1/*.PDF; do [ -f "$file" ] && mv ...; done
Run Code Online (Sandbox Code Playgroud)

作为旁注,您的参数扩展模式很好。

  • @KazRodgers 设置 `dotglob` 选项:`shopt -s dotglob` (2认同)