用bash中的另一个文件替换整个文件
Posted
技术标签:
【中文标题】用bash中的另一个文件替换整个文件【英文标题】:replace a whole file with another file in bash 【发布时间】:2012-08-25 07:08:32 【问题描述】:我已经学习了如何使用 bash 脚本替换一行,但我想学习如何用另一个文件夹中同名的另一个文件替换整个文件。这可能吗??
【问题讨论】:
【参考方案1】:cp -f [oringinal file] [new file]
复制原始文件并覆盖目标文件(因此-f
代表“强制”)。
【讨论】:
我无法处理这个。我错过了什么还是需要以 done 结束它??? 你写的命令是什么?你不需要方括号。 附带说明,当使用 sudo 完成时,这会保留原始文件的模式和所有权 如果您仍然看到提示,请在命令行中使用which cp
来检查cp
别名。
看起来你切换了参数,应该是相反的。 cp -f [new file] [original file]
【参考方案2】:
如果您试图仅复制文件的内容,请尝试
cat /first/file/same_name > /second/file/same_name
这将用第一个文件的内容覆盖第二个文件的所有内容。但是,您的第二个文件的所有者、组和权限将保持不变。
【讨论】:
“覆盖内容”和“复制”如果目标文件是符号链接则有点不同:-)【参考方案3】:使用这些命令:
mv file1 file2
如果 file2 不存在,则将 file1 重命名为 file2。如果 file2 存在,则将其内容替换为 file1 的内容。
mv -i file1 file2
然而,与上面一样,由于指定了"-i"
(交互式)选项,如果 file2 存在,则在用 file1 的内容覆盖之前提示用户。
mv file1 file2 file3 dir1
文件file1、file2、file3 被移动到目录dir1。 dir1 必须存在,否则mv
将退出并出现错误。
mv dir1 dir2
如果 dir2 不存在,则将 dir1 重命名为 dir2。如果 dir2 存在,则在目录 dir2 中创建目录 dir1。
【讨论】:
这并不完全符合 OP 的要求 - 它移动/重命名文件,而不是复制/覆盖它们... 嗨@Christian 感谢您的评论。您能否进一步详细说明?我想了解为什么重命名文件与替换不同。例如,如果我想用 file2 “替换” file1,为什么我不能这样做: mv file2 file1 ?如果先删除 file1,此命令是否会替换? 重命名文件意味着它不会存在于原始位置 - 在我看来,OP 想要的是覆盖一个没有任何副作用的文件。【参考方案4】:今天我需要相同的解决方案,唯一的改变是我需要用新版本替换许多用户目录中的旧版本 php 文件。我要去这里,只是将匹配与其他堆栈的答案混合并解决我的问题。我使用 @joseph 代码和 find 命令。
我在这里分享我的小代码,希望对某人有所帮助。
for file in $(find /home/*/ -type f -name 'timthumb.php');
do
cat /home/timthumb.php > $file;
done
【讨论】:
要确保它不仅仅适用于文本文件,请使用 cp -f,例如find -type f -iname myFile | while read fileName; do cp-f ../sourceFileLocation/myFile $fileName; done
它还将从 ../sourceFileLocation/myFile 获取文件并替换当前目录和子目录中的所有匹配项,但保证可以使用二进制文件。我个人也更喜欢| while read
而不是for $()
。以上是关于用bash中的另一个文件替换整个文件的主要内容,如果未能解决你的问题,请参考以下文章