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)。) –