2017-01-24 78 views
-1

find /$HOME/Desktop -name "*.dpx" -exec sed -i "" 's/Exile1/ExileR1/' {} \;sed挂没有结果,但重命名作品

只是挂起没有结果。我不清楚问题可能是什么。

Buuuut,

find /$HOME/Desktop -name "*.dpx" -exec rename 's/Exile1/ExileR1/' {} \;

工作正常。

为什么?

我在MacOSX上。

+3

Sed似乎认为你的命令是'/ s/Exi ...'而不是's/Exil ...' - 你是否复制粘贴了正确的命令? –

+0

啊,修正了这个问题。 's/Exil ...'只是挂起而没有任何反应...... – Bleakley

+1

这两个命令尝试做不同的事情。 Sed查看文件的_content_并更改_content_; 'rename'查看文件的_name_并更改_name_。你想要哪一个? (请参阅[mklement0's answer](http://stackoverflow.com/a/41837720/3266847)。) –

回答

-1

我没有任何.dpx文件,但尝试添加-e来澄清搜索脚本。像这样...

find /$HOME/Desktop -name "*.dpx" -exec sed -i "" -e 's/Exile1/ExileR1/' {} \; 
+0

请不要发布这样的快速提示作为答案 - 而是使用评论。 '-e'的使用在这里没有任何区别。 – mklement0

0

既然你对比发生故障的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执行实际的重命名。

+0

谢谢@ mklement0我注意到运行sed命令确实改变了我的文件的校验和。 DPX是图像文件,所以我不清楚sed会做什么来改变校验和......它不会改变文件的十六进制只是文本内容,如果存在的话,对吗? – Bleakley

+0

是的,即使没有实际的替换发生,_your_'sed'命令也会更改文件的_content_。至少,BSD'sed'会在你的内容后面追加'\ n'。但这听起来像你只是想要_rename_文件,而不是_改变他们的内容,对吧? – mklement0

+0

我只是想重命名,并感谢您的建议,我只是重命名。一旦我看到校验和发生了变化,我就不明白sed实际上在做什么。如果内容仅仅是一个图像,那么\ n被添加到十六进制? @ mklement0 – Bleakley