如何从目录中的多个文件中删除前缀

gee*_*.24 6 find

我有大约 250 个文件名:

no_responseEvent_2002.02.07.03.15.56.970/       
no_responseEvent_2002.02.10.01.47.07.450/       
no_responseEvent_2002.02.13.14.18.46.00/
Run Code Online (Sandbox Code Playgroud)

我想从每个文件名中删除“no_response”。
我怎么做?
我知道 for 循环可以工作,但我对如何实现它感到困惑。

Ram*_*esh 16

我假设所有 250 个文件都在同一目录中并遵循相同的命名模式。如果是这样,你可以这样做,

for i in  "$remove"*;do mv "$i" "${i#"$remove"}";done
Run Code Online (Sandbox Code Playgroud)

测试

ls
no_responseEvent_2002.02.07.03.15.56.970   
no_responseEvent_2002.02.07.03.15.56.972
no_responseEvent_2002.02.07.03.15.56.971  
no_responseEvent_2002.02.07.03.15.56.973
Run Code Online (Sandbox Code Playgroud)

现在,在我运行for循环后,我得到的输出为,

remove=no_response
for i in  "$remove"*;do mv "$i" "${i#"$remove"}";done
ls
Event_2002.02.07.03.15.56.970  
Event_2002.02.07.03.15.56.971  
Event_2002.02.07.03.15.56.972  
Event_2002.02.07.03.15.56.973
Run Code Online (Sandbox Code Playgroud)

参考

http://www.commandlinefu.com/commands/view/2519/uniformly-correct-filenames-in-a-directory

  • 或者简单地说,`"${i/no_response/}"`... (3认同)