2016-01-06 82 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

相关问题