所以我有一個名爲testdir
的目錄,我想從該目錄中的文件中刪除文件名中的下劃線。查找文件並刪除文件名中的字符
我試圖用這個命令
find testdir -type f -exec ls {} \; | sed 's/_*//'
它將輸出沒有下劃線的文件名,但它不會刪除下劃線永久。任何人都可以幫我嗎?
謝謝!
所以我有一個名爲testdir
的目錄,我想從該目錄中的文件中刪除文件名中的下劃線。查找文件並刪除文件名中的字符
我試圖用這個命令
find testdir -type f -exec ls {} \; | sed 's/_*//'
它將輸出沒有下劃線的文件名,但它不會刪除下劃線永久。任何人都可以幫我嗎?
謝謝!
如果您僅僅是在你的目錄中的文件循環,用一個簡單的循環:
while IFS= read -r file
do
echo mv "$file" "${file//_/}" #once you are sure it works, remove the echo!
done < <(find -type f -name "*_*")
這將養活while
循環與find
命令的輸出。然後,使用${var//_/}
刪除名稱中的所有_
。
爲什麼你的方法不能正常工作?
因爲你說的
find ... -exec ls {} \; | sed '...'
也就是說,你正在尋找的東西,然後用sed
改變輸出。也就是說,文件本身沒有做任何事情。
這可能對你有所幫助 find testdir -type f |重命名's/_ //'
Regards
否,但是如果您再次cd testdir,則文件的名稱不會更改,謝謝! –
@DriesCoppens不確定你的意思和你的嘗試。正如你在我的回答中看到的那樣,當你看到它按預期工作時,你需要刪除'echo'。 – fedorqui
是的,我看到了,但用我的方法它沒有改變:) –