【发布时间】:2011-08-06 00:58:17
【问题描述】:
我正在使用 Linux,并且想用现有文件 /home/user/offblack.png 替换所有包含字符串 000000 的文件,但保留现有文件名。我一直在使用 -exec 和 xargs 的各种组合来解决这个问题,但没有运气。到目前为止,我有:
find | grep 000000
它确实列出了我想要更改的所有文件。如何复制这些文件并将其替换为现有的 offblack.png 文件?
【问题讨论】:
我正在使用 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 添加到文件列表中,以防生成的 fgreps 之一最终只一个文件名 - 它确保输出始终格式化为“文件名:”),只删除文件名,然后一个接一个地复制这些文件的offblack.png。请注意,我在其中插入了/bin/echo。那是你的预演。移除回声以使其真正运行。
如果您的意思是 文件名 包含“000000”:
find . -type f -a -name '*000000*' -exec /bin/echo /bin/cp /path/to/offblack.png {} \;
简单得多。 :-) 在当前目录下查找每个文件,其名称包含您的字符串,并在其上执行 offblack.png 的副本。再一次,我给你的是一个预演。消除现场消防演习的回声。 :-)
【讨论】:
find . -type f | grep 000000 | tr \\n \\0 | xargs -0i+ cp ~/offblack.png "+"
【讨论】:
让我们尝试更多地使用 Bash:
for read -r filename
do
hit=""
for read -r
do
if [[ $REPLY == *000000* ]]
then
hit=$filename
break
fi
done < $filename
[[ -n $hit ]] && cp /path/offblack.png $filename
done < <(find . -type -f)
要搜索的手册页更少!
【讨论】: