Sed 查找文件并删除文件名中的字符

Sed 查找文件并删除文件名中的字符,sed,find,Sed,Find,因此,我有一个名为testdir的目录,我想从该目录中的文件中删除文件名中的下划线 我试图使用这个命令 find testdir-type f-exec ls{}\|sed's/*/' 它将输出不带下划线的文件名,但不会永久删除下划线。有人能帮我吗 谢谢 如果您只是在目录中的文件之间循环,请使用一个简单的循环: while IFS= read -r file do echo mv "$file" "${file//_/}" #once you are sure it wor

因此,我有一个名为
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 "*_*")
也就是说,您正在查找某些内容,然后使用
sed
更改输出。也就是说,对文件本身不做任何操作。

这可能会对您有所帮助 查找testdir-键入f |重命名为's//'


关于

否,但如果您再次cd testdir,则不会更改文件名,谢谢@Driescopens不知道你的意思和你尝试了什么。正如您在我的回答中所看到的,一旦您看到它按预期工作,您就需要删除
echo
。是的,我知道,但我的方法没有改变:)
find ... -exec ls {} \; | sed '...'