如何将目录中的所有文件从$ filename重命名为$ Backupfilename

时间:2019-01-30 02:21:35

标签: bash shell scripting

我在 / home / evaluation 中有一个名为 evaluation 的文件夹,其中包含以下文件夹:

  • 地理
  • 数学
  • 历史
  • 英语

如何重命名此文件夹中的每个文件,如下所示:

  • BackupGeography
  • BackupMath
  • BackupHistory
  • BackupEnglish

这是我到目前为止尝试过的

Name
----
Domain Users_1234

但是不幸的是,它并不起作用。

2 个答案:

答案 0 :(得分:2)

尝试一下:

for file in /home/evaluation/*
do
 mv -i "$file" "$(dirname "$file")/Backup$(basename "$file")"
done

说明:dirname获取目录名(例如dirname /home/evaluation/Geography打印“ / home / evaluation”),而basename获取不带路径的文件名(例如dirname /home/evaluation/Geography打印“地理”)。所以

... "$(dirname "$file")/Backup$(basename "$file")"
--> "/home/evaluation" + "/Backup" + "Geography"
--> "/home/evaluation/BackupGeography"

(注意:+不是shell运算符。至少,不是这样。我只是在说明它的解析方式。)

哦,如果名字冲突,mv -i会问该怎么办。如果没有-i,它将无声且不可逆地删除其中一个冲突文件。在没有mv(或-i)的情况下使用-n进行批量移动总是让我感到紧张。

答案 1 :(得分:1)

你可以

for file in /home/evaluation/*
do
 mv "$file" `dirname "$file"`/Backup`basename "$file"`
done