linux - 使用 bash,如何找到包含特定字符串的所有文件并将它们替换为现有文件?

标签 linux bash exec xargs

我正在使用 Linux,我想用现有文件/home/user/offblack.png 替换所有包含字符串 000000 的文件,但保留现有文件名。我已经使用 -exec 和 xargs 的各种组合进行了一段时间的研究,但没有成功。到目前为止,我有:

 find | grep 000000

它确实列出了我想要更改的所有文件。如何复制这些文件并将其替换为我现有的 offblack.png 文件?

最佳答案

这是我会使用的:

find (your find args here) \
| xargs fgrep '000000' /dev/null \
| awk -F: '{print $1}' \
| xargs -n 1 -I ORIGINAL_FILENAME /bin/echo /bin/cp /path/to/offblack.png ORIGINAL_FILENAME

展开,找到您感兴趣的所有文件,在其中 grep 查找字符串 '000000'(添加/dev/null 到文件列表,以防生成的 fgrep 之一s 最终只有一个文件名 - 它确保输出的格式始终为“文件名:<包含'000000'>”的行),仅删除文件名,然后一个一个地复制 offblack.png 覆盖这些文件.请注意,我在其中插入了一个 /bin/echo。那是你的试运行。删除 echo 以使其真正运行。

如果您的意思是文件名包含“000000”:

find . -type f -a -name '*000000*' -exec /bin/echo /bin/cp /path/to/offblack.png {} \;

简单多了。 :-) 查找当前目录下名称包含您的字符串的每个文件,并在其上执行 offblack.png 的副本。再一次,我给你的是试运行。消除现场消防演习的 echo 。 :-)

关于linux - 使用 bash,如何找到包含特定字符串的所有文件并将它们替换为现有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6948118/

相关文章:

c++ - 如何使用 `execl()` 在 C/C++ 中运行系统命令,将函数参数仅作为命令行而不是可执行文件传递?

java - 如何使管道与 Runtime.exec() 一起工作?

linux - 如何从 emacs 中实际更改/设置环境变量

java - 使用 bash 脚本/grep/sed 以用文件名本身替换类名

linux - 日期中的时区?

c++ - 这段代码不是线程安全的,不是吗?

linux - 如果 Linux 进程失败或崩溃,自动重新启动它

php - 在特定时间后在 php 中终止函数?

linux - 为什么 autoconf 会错误地找到一个以后不可用的功能?

c++ -/usr/lib64/libstdc++.so.6 : version `CXXABI_1.3.8' not found when loading R packages