如何使用 find 替换多个同名文件

如何使用 find 替换多个同名文件

我有几个同名的文件(例如,somefile.php)分散在 /var/ 下的几个目录中

如果我想用位于 /home/me/somefile.php 的新版本的 somefile.php 替换所有这些文件...我该怎么做?我找到的每个搜索结果都与替换有关文件中的文本但是我要替换整个文件

我知道我可以使用以下命令找到所有文件:

find /var/ -type f -name somefile.php 

但我不确定如何将 /home/me/somefile.php 移到结果中并全部替换它们。

答案1

查找/var -type -f -name somefile.php -exec cp /home/me/somefile.php {} \;

当心!

答案2

如您所见,这也适用于带有空格的文件:

hoeha@dw:/tmp/test$ mkdir my\ dir{1,2,3}/ ; touch my\ dir{1,2,3}/file\ to\ replace
hoeha@dw:/tmp/test$ tree
.
├── my dir1
│   └── file to replace
├── my dir2
│   └── file to replace
└── my dir3
    └── file to replace

3 directories, 3 files
hoeha@dw:/tmp/test$ echo "the new one" > the\ new\ one
hoeha@dw:/tmp/test$ find . -type f -name 'file to replace' -exec cp the\ new\ one \{\} \; -execdir mv \{\} the\ new\ one \;
hoeha@dw:/tmp/test$ tree
.
├── my dir1
│   └── the new one
├── my dir2
│   └── the new one
├── my dir3
│   └── the new one
└── the new one

3 directories, 4 files
hoeha@dw:/tmp/test$ cat my\ dir1/the\ new\ one
the new one
hoeha@dw:/tmp/test$ find -version | head -1
find (GNU findutils) 4.4.2
hoeha@dw:/tmp/test$ 

这就是你想要的吗?

答案3

无 GNU 扩展版本:

find /var -name somefile.php | while read LINE; do cp /home/me/somefile.php "$LINE"; done

相关内容