我有命令
find . -type f \( ! -name "*.png" \) -print0 | \
xargs -0 sed -i 's#word#replace#g'
awk/sed: How to do a recursive find/replace of a string?
BASH: recursive program to replace text in a tree of files
此命令到目前为止有效,但我想显示sed
替换文本的文件。
是否有一些允许的参数?
答案 0 :(得分:2)
您可以同时使用print和exec选项并打印出它处理的文件:
find . -type f \( ! -name "*.png" \) -print -exec sed -i 's#word#replace#g' {} \; 2>/dev/null
答案 1 :(得分:0)
您缺少cmp来比较更改前后的两个文件。你可以尝试这些方面的东西:
find . -type f \( ! -name "*.png" \) -exec sh -c 'sed "s/word/replace/g" $0 > $0.$$; if ! cmp $0.$$ $0; then echo $0; mv $0.$$ $0; else rm $0.$$; fi' {} \;
答案 2 :(得分:0)
我不知道你在哪个平台,但这是可能的。更改你的xargs
以运行一个shell,这样你就可以执行多个命令然后在shell中,测试文件是否比你在开始时创建的任意文件更新 - 即它被更改
touch /tmp/go
find ... | xargs ... -I % sh -c 'sed "%"; [ "%" -nt /tmp/go ] && echo %'