find /$HOME/Desktop -name "*.dpx" -exec sed -i "" 's/Exile1/ExileR1/' {} \;
sed挂没有结果,但重命名作品
只是挂起没有结果。我不清楚问题可能是什么。
Buuuut,
find /$HOME/Desktop -name "*.dpx" -exec rename 's/Exile1/ExileR1/' {} \;
工作正常。
为什么?
我在MacOSX上。
find /$HOME/Desktop -name "*.dpx" -exec sed -i "" 's/Exile1/ExileR1/' {} \;
sed挂没有结果,但重命名作品
只是挂起没有结果。我不清楚问题可能是什么。
Buuuut,
find /$HOME/Desktop -name "*.dpx" -exec rename 's/Exile1/ExileR1/' {} \;
工作正常。
为什么?
我在MacOSX上。
我没有任何.dpx文件,但尝试添加-e来澄清搜索脚本。像这样...
find /$HOME/Desktop -name "*.dpx" -exec sed -i "" -e 's/Exile1/ExileR1/' {} \;
请不要发布这样的快速提示作为答案 - 而是使用评论。 '-e'的使用在这里没有任何区别。 – mklement0
既然你对比发生故障的sed
命令rename
,它看起来像你想重命名文件,而sed
命令将在内容执行字符串替换您通过的文件的;然后-i
选项将修改后的输入写回输入文件(松散地说)。
sed
不能直接重命名文件,但你可以使用它作为一个辅助命令来构造一个新的文件名,然后传递给mv
:
find "$HOME/Desktop" -name "*.dpx" -print0 |
while IFS= read -d '' -r file; do
echo mv "$file"' "$(sed 's/Exile1/ExileR1/' <<<"$file")"
done
删除echo
执行实际的重命名。
谢谢@ mklement0我注意到运行sed命令确实改变了我的文件的校验和。 DPX是图像文件,所以我不清楚sed会做什么来改变校验和......它不会改变文件的十六进制只是文本内容,如果存在的话,对吗? – Bleakley
是的,即使没有实际的替换发生,_your_'sed'命令也会更改文件的_content_。至少,BSD'sed'会在你的内容后面追加'\ n'。但这听起来像你只是想要_rename_文件,而不是_改变他们的内容,对吧? – mklement0
我只是想重命名,并感谢您的建议,我只是重命名。一旦我看到校验和发生了变化,我就不明白sed实际上在做什么。如果内容仅仅是一个图像,那么\ n被添加到十六进制? @ mklement0 – Bleakley
Sed似乎认为你的命令是'/ s/Exi ...'而不是's/Exil ...' - 你是否复制粘贴了正确的命令? –
啊,修正了这个问题。 's/Exil ...'只是挂起而没有任何反应...... – Bleakley
这两个命令尝试做不同的事情。 Sed查看文件的_content_并更改_content_; 'rename'查看文件的_name_并更改_name_。你想要哪一个? (请参阅[mklement0's answer](http://stackoverflow.com/a/41837720/3266847)。) –