用bash中的另一个文件替换整个文件

Dᴀʀ*_*ᴅᴇʀ 19 directory replace batch-file

我已经学会了如何使用bash脚本替换一行,但我想学习如何用同名的另一个文件夹中的另一个文件替换整个文件.这可能吗??

Nic*_*unt 34

cp -f [oringinal file] [new file]
Run Code Online (Sandbox Code Playgroud)

复制原始文件并覆盖目标文件(因此-f代表"强制").

  • 看来你改变了论点,应该是相反的。`cp -f [新文件] [原始文件]` (5认同)
  • 您的“新”和“原创”措辞具有误导性。我建议改为使用“复制”和“覆盖”。 (2认同)

Jos*_*eph 22

如果您尝试仅复制文件的内容,请尝试

cat /first/file/same_name > /second/file/same_name
Run Code Online (Sandbox Code Playgroud)

这将使用第一个文件中的内容覆盖第二个文件的所有内容.但是,第二个文件的所有者,组和权限将保持不变.


小智 6

使用这些命令:

mv file1 file2
Run Code Online (Sandbox Code Playgroud)

如果 file2 不存在,则将 file1 重命名为 file2。如果 file2 存在,则其内容将替换为 file1 的内容。

mv -i file1 file2
Run Code Online (Sandbox Code Playgroud)

然而,与上面一样,由于"-i"指定了(interactive) 选项,如果 file2 存在,则会在用 file1 的内容覆盖之前提示用户。

mv file1 file2 file3 dir1
Run Code Online (Sandbox Code Playgroud)

文件file1、file2、file3 被移动到目录dir1。dir1 必须存在,否则mv会出现错误退出。

mv dir1 dir2
Run Code Online (Sandbox Code Playgroud)

如果 dir2 不存在,则将 dir1 重命名为 dir2。如果 dir2 存在,则在目录 dir2 中创建目录 dir1。

  • 这并不完全符合 OP 的要求——它移动/重命名文件,而不是复制/覆盖它们...... (3认同)
  • 重命名文件意味着它不会存在于原始位置 - 在我看来,OP想要的是覆盖文件而不产生任何此类副作用。 (3认同)

ada*_*ces 5

今天我需要一些相同的解决方案,唯一的变化是我需要用新版本替换许多用户目录中的旧版本 php 文件。我正在前往这里,只是将匹配与其他堆栈的答案混合并解决我的问题。我在 find 命令中使用了 @joseph 代码。

我在这里分享我的小代码,希望它会帮助别人。

for file in $(find /home/*/ -type f -name 'timthumb.php');
do
    cat /home/timthumb.php > $file;
done
Run Code Online (Sandbox Code Playgroud)