2017-01-24 17 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