Bash 脚本中的“mv”与“cp”

Bash 脚本中的“mv”与“cp”

我正在尝试编写一个脚本,该脚本能够将一些设置和文件加载到主板上。基本上,我会将闪存驱动器插入主板,然后单击脚本。然后,脚本将复制/移动一些文件以替换过期的旧文件。例如,我将用/etc/apt/sources.list新文件替换不同的存储库。将文件复制或移动到此位置以替换它是否更好?我还将在此脚本中安装 apache2,然后将目录移动到和wwwcgi-bin复制或移动目录是否更好?我还将更改权限。

基本上我的问题是,处理 bash 脚本时移动mv或复制文件和目录是否更好?cp

答案1

如果仅在目标路径中需要它,则移动它;如果在两个位置都需要它,则复制它。mv或本身不存在“不安全性” cp,如果您开始尝试实现自己的 ,那么您将不必要地给您的脚本增加复杂性(并且极有可能出现错误)mv

对于特殊情况,可能会有比这两种工具更合适的工具。例如,如果您想在复制时更改所有者或模式,可以使用一款install工具,它只需一行代码即可完成此操作,而不是三行。

答案2

视情况而定。在某些(通常很少见)情况下,你应该将文件复制到一个临时名称在目标文件系统上,然后将其 mv 为最终名称,因为 mv 操作在日志文件系统中是原子的。如果应用程序有可能在您替换文件时尝试读取该文件,请执行此操作。

您指定要从其他文件系统(闪存驱动器)传输文件。在这种情况下,mv 正在执行隐式 cp && rm。如果您回溯 20 多年前,mv 甚至不支持此功能,但没有理由停留在历史中。

相关内容