使用Linux内置工具批量重命名包含空格的文件名

使用Linux内置工具批量重命名包含空格的文件名

我一直在读关于批量重命名、更改前缀并会尝试使用我自己的文件。

在这种情况下,我想将Old其删除并替换为New

测试文件

01. Old Name.txt
02. Old Name.txt
03. Old Name.txt

尝试1

for f in *.txt
do
    mv "$f" "New${f#Old}"
done

输出1

New01. Old Name.txt
New02. Old Name.txt
New03. Old Name.txt

尝试2

for i in *.txt
do
    mv ${i} ${i/#Old/New}
done

输出 2(无变化)

user@linux:~$ for i in *.txt
> do
> mv ${i} ${i/#Old/New}
> done
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
mv: target 'Name.txt' is not a directory
user@linux:~$ 

我的解决方案有什么问题?

所需输出

01. New Name.txt
02. New Name.txt
03. New Name.txt

答案1

  1. 引用你的变量。另外,在使用之前${i/Old/New}不要使用井号字符 ( #) Old。强制#匹配从文件名的开头开始,但没有一个文件以 开头Old,它们都以0.

    $ touch "01. Old Name.txt" "02. Old Name.txt" "03. Old Name.txt"
    $ for i in *.txt ; do mv -v "$i" "${i/Old/New}" ; done
    renamed '01. Old Name.txt' -> '01. New Name.txt'
    renamed '02. Old Name.txt' -> '02. New Name.txt'
    renamed '03. Old Name.txt' -> '03. New Name.txt'
    
  2. 安装并使用 perlrename实用程序(例如sudo apt-get install rename在 debian 及其衍生产品上)。这比 DIY 批量重命名要好得多。

相关内容