2016-01-06 84 views
0

所以我有一個名爲testdir的目錄,我想從該目錄中的文件中刪除文件名中的下劃線。查找文件並刪除文件名中的字符

我試圖用這個命令

find testdir -type f -exec ls {} \; | sed 's/_*//'

它將輸出沒有下劃線的文件名,但它不會刪除下劃線永久。任何人都可以幫我嗎?

謝謝!

回答

0

如果您僅僅是在你的目錄中的文件循環,用一個簡單的循環:

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改變輸出。也就是說,文件本身沒有做任何事情。

+0

否,但是如果您再次cd testdir,則文件的名稱不會更改,謝謝! –

+0

@DriesCoppens不確定你的意思和你的嘗試。正如你在我的回答中看到的那樣,當你看到它按預期工作時,你需要刪除'echo'。 – fedorqui

+0

是的,我看到了,但用我的方法它沒有改變:) –

0

這可能對你有所幫助 find testdir -type f |重命名's/_ //'

Regards

相關問題