所以我有一个名为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
是的,我看到了,但用我的方法它没有改变:) –