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

Bash 如何将目录中的所有文件从$filename重命名为$Backupfilename,bash,shell,scripting,Bash,Shell,Scripting,我有一个名为评估的文件夹,位于/home/evaluation中,其中包含以下内容: 地理 数学 历史 英式 如何将此文件夹中的每个文件重命名为以下内容: 备份地理 备份数学 备份历史 备份英语 以下是我到目前为止所做的尝试: for file in /home/evaluation/* do mv "$file" "${file//Backup}" done 但不幸的是,它不起作用。你可以这样做 用于/home/evaluation中的文件/* 做 mv“$file”`dirna

我有一个名为评估的文件夹,位于/home/evaluation中,其中包含以下内容:

  • 地理
  • 数学
  • 历史
  • 英式
如何将此文件夹中的每个文件重命名为以下内容:

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

以下是我到目前为止所做的尝试

for file in /home/evaluation/*
do
 mv "$file" "${file//Backup}"
done
但不幸的是,它不起作用。

你可以这样做

用于/home/evaluation中的文件/*
做
mv“$file”`dirname“$file”`/Backup`basename“$file”`
完成
您可以这样做

用于/home/evaluation中的文件/*
做
mv“$file”`dirname“$file”`/Backup`basename“$file”`
完成
试试这个:

for file in /home/evaluation/*
do
 mv -i "$file" "$(dirname "$file")/Backup$(basename "$file")"
done
说明:
dirname
获取目录名(例如
dirname/home/evaluation/Geography
prints/home/evaluation),而
basename
获取不带路径的文件名(例如
dirname/home/evaluation/Geography
打印“Geography”)。所以

(注意:
+
不是shell操作符。至少,不是这样。我只是演示如何解析它。)

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

试试以下方法:

for file in /home/evaluation/*
do
 mv -i "$file" "$(dirname "$file")/Backup$(basename "$file")"
done
说明:
dirname
获取目录名(例如
dirname/home/evaluation/Geography
prints/home/evaluation),而
basename
获取不带路径的文件名(例如
dirname/home/evaluation/Geography
打印“Geography”)。所以

(注意:
+
不是shell操作符。至少,不是这样。我只是演示如何解析它。)


哦,
mv-i
将询问如果名称冲突怎么办。如果没有
-i
,它将以静默方式不可逆地删除其中一个冲突文件。使用
mv
进行批量移动而不使用
-i
(或
-n
)总是让我感到紧张。

非常感谢!!我使用了一个错误的正则表达式:${string/substring/substitution}@Finalmix6实际上没有一种方法可以通过替换来实现这一点,因为它们将用其他东西替换第一次出现的例如“/”。。。但在这种情况下,您希望将上次出现的“/”替换为“/Backup”。哦,这个特性不使用正则表达式模式,它使用glob(或“通配符”)模式——它们非常相似,令人困惑。非常感谢!!我使用了一个错误的正则表达式:${string/substring/substitution}@Finalmix6实际上没有一种方法可以通过替换来实现这一点,因为它们将用其他东西替换第一次出现的例如“/”。。。但在这种情况下,您希望将上次出现的“/”替换为“/Backup”。哦,这个功能不使用正则表达式模式,它使用glob(或“通配符”)模式——它们非常相似,令人困惑。非常感谢您提供的帮助!非常感谢您提供的帮助!