【问题标题】:Wild Cards File Rename Script通配符文件重命名脚本
【发布时间】:2026-02-13 11:05:02
【问题描述】:

我正在尝试编写一个基于文件扩展名重命名文件的脚本。 该脚本应提示用户输入所需的文件扩展名。之后它应该询问用户在文件名前添加什么前缀。默认前缀应该是今天的日期,格式为 YYYY-DD-MM。

因此,如果用户按下回车键,它应该只使用今天的日期作为默认日期。否则它将使用用户输入的任何前缀。之后我希望它在同一行显示原始文件名和文件的新名称,然后最后应该重命名文件:

这就是我希望输出的显示方式

示例输出 1:

Please enter a file extension: gif
Please enter a file prefix: (Press ENTER for 201802­19). helpme
Renaming goose.gif to helpmegoose.gif.

示例输出 2:

Please enter a file extension: gif
Please enter a file prefix: (Press ENTER for 2018­0219).
Renaming goose.gif to 2018­02­19goose.gif.

这是我到目前为止的代码:

#!/bin/bash

cd /c/Users/johndoe/unix
curr=$(date +"%Y-%m-%d")

echo -n "Please enter file extension: " ; read extension
echo -n "Please enter a file prefix(Press ENTER for ${curr}) " ; read prefix 

if [ -e $extension ]
then

for FILES in /c/Users/johndoe/unix/*.$extension
do
    echo -n "Renaming ${FILES} to " ; mv ${FILES} $prefix${FILES};
done
else 
    echo -n "Renaming ${FILES} to " ; mv ${FILES} $curr${FILES};
fi

【问题讨论】:

  • 你测试的是$extension,而不是$prefix
  • [ -e $extension ] 检查 $extension 中名为 whats 的文件,而不是变量。我想你想要[[ -n $prefix ]]
  • 啊,我明白了,你建议我修改成什么?

标签: bash shell unix for-loop wildcard


【解决方案1】:
#!/usr/bin/env bash

cd /c/Users/johndoe/unix || exit 1
curr=$(date +"%Y-%m-%d")

IFS= read -rp "Enter file extension: " ext
IFS= read -rp "Enter prefix (ENTER for $curr): " prefix

shopt -s nullglob

for file in *".$ext"; do
    printf 'Renaming %s to %s.\n' "$file" "${prefix:-$curr}$file"
    mv -- "$file" "${prefix:-$curr}$file"
done

【讨论】: