13

我在 ubuntu 机器上有许多名称为 a1.txt、b1.txt、c1、txt...的文件。

有什么快速的方法可以将所有文件名更改为 a2.txt、b2.txt、c2.txt...?

特别是,我想替换部分名称字符串。例如,每个文件名都包含一个名为“apple”的字符串,我想在所有文件名中将“apple”替换为“pear”。

任何命令或脚本?

4

6 回答 6

25

无需任何额外软件,您就可以:

for FILE in *1.txt; do mv "$FILE" $(echo "$FILE" | sed 's/1/2/'); done
于 2011-08-08T17:17:24.673 回答
4
for f in {a..c}1.txt; do echo "$f" "${f/1/2}"; done

如果输出看起来正确,则将 'echo' 替换为 'mv'。

我想用“linux”替换“apple”

for f in *apple*; do mv "$f" "${f/apple/linux}"; done

第 1 行中的大括号至少应该与 bash 一起使用。

于 2011-08-08T17:27:11.583 回答
2

以下命令将通过将名称中第一次出现的 替换为 来重命名指定的1文件2

rename 1 2 *1.txt
于 2011-08-08T17:17:51.380 回答
0
ls *1.txt | perl -ne 'chomp; $x = $_; $x =~ s/1/2/; rename $_, $x;'
于 2011-08-08T17:17:25.893 回答
0

这是另一个对我有用的选项(按照上面的示例),用于不同子目录中的文件

for FILE in $(find . -name *1.txt); do mv "$FILE" "${FILE/1/2}"; done;
于 2015-09-03T17:19:22.040 回答
-1

像这样的东西应该工作:

for i in *1.txt; do
    name=$(echo $i | cut -b1)
    mv $i ${name}2.txt
done

修改以满足您的需求。

于 2011-08-08T17:17:53.643 回答