查找文件并删除文件名

时间:2016-01-06 17:42:28

标签: sed find

所以我有一个名为testdir的目录,我想从该目录中的文件中删除文件名中的下划线。

我尝试使用此命令

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

它将输出没有下划线的文件名,但不会永久删除下划线。有谁可以帮助我?

谢谢!

2 个答案:

答案 0 :(得分: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更改输出。也就是说,文件本身没有任何操作。

答案 1 :(得分:0)

这可能会对你有所帮助 找到testdir -type f |重命名&#39; s / _ //&#39;

此致