我的档案格式为639486572_016b0f3d-9ec3-4ad1-84ae-c98b68390322.wav
。这些文件以类似于日期的文件夹和子文件夹格式驻留。./2019/05/31/639486572_016b0f3d-9ec3-4ad1-84ae-c98b68390322.wav
。
目标是删除之前和包括的所有内容_
。我能做到的rename -v 's/$\.+_//'
但是当我尝试结合使用find
它时,似乎正确地重命名了子文件夹中找到的所有文件,但是将它们移动\到文件夹的根目录中im在这种情况下无法正常工作./2019
我正在运行的命令是 find -type f -name "*_*" | rename -v 's/$\.+_//'
如何确保文件位置不变?
$\
将是未定义的,并且不会在您的正则表达式中执行任何操作。
.+_
将匹配从字符串开头到最后一个_
字符的所有内容,包括路径信息。您将要使用一个更严格的表达式,该表达式不能捕获整个路径。
有几种方法可以做到:
s![^/]+_!! greedy match of consecutive non-/ chars
s!(.+/)?.+_!$1! capture path and include it in the replacement
当您准备打开蠕虫病毒罐时,还有一种解决方案将使用否定的后向断言。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句