我正在使用 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
在其中插入了一个。那是你的预演。删除回声以使其真正运行。
如果您的意思是文件名包含“000000”:
find . -type f -a -name '*000000*' -exec /bin/echo /bin/cp /path/to/offblack.png {} \;
简单得多。:-) 在当前目录下查找每个文件,其名称包含您的字符串,并在其上执行 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)
要搜索的手册页更少!
find . -type f | grep 000000 | tr \\n \\0 | xargs -0i+ cp ~/offblack.png "+"