【发布时间】:2016-04-10 21:51:58
【问题描述】:
所以我有一个名为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 更改输出。也就是说,对文件本身没有做任何事情。
【讨论】:
echo 按预期工作,您就需要删除它。
这可能会对您有所帮助 查找 testdir -type f |重命名's/_//'
问候
【讨论】: