Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 文件名字符替换_Linux_Grep - Fatal编程技术网

Linux 文件名字符替换

Linux 文件名字符替换,linux,grep,Linux,Grep,我有几千个文件需要重命名/mv,方法是从文件名的开头删除一组字符 相关文件名的字符f后跟一个数字序列,即文件名的下划线。文件名可以包括alhpa数字和下划线。例如,f1234567_this_是_a_file.doc,或f987654321_mine.xlsx 数值的数量可以不同,但后面总是下划线,但文件名本身也可以包含下划线 我尝试了很多perl脚本,并使用了grep,但都没有用。有办法做到这一点吗。另一个问题是文件名可能还包含@等 我可以使用egrep-if[0-9]+_获取文件的s列表,并

我有几千个文件需要重命名/mv,方法是从文件名的开头删除一组字符

相关文件名的字符f后跟一个数字序列,即文件名的下划线。文件名可以包括alhpa数字和下划线。例如,f1234567_this_是_a_file.doc,或f987654321_mine.xlsx

数值的数量可以不同,但后面总是下划线,但文件名本身也可以包含下划线

我尝试了很多perl脚本,并使用了grep,但都没有用。有办法做到这一点吗。另一个问题是文件名可能还包含@等

我可以使用egrep-if[0-9]+_获取文件的s列表,并使用它解析出第一部分并对文件进行重命名,但这不起作用

谢谢

更多: 我在一个文件中做了一个ls-1,这样我就有了所有10000个文件名的列表。我在文件列表中使用了egrep-if[0-9]+来给我一个需要更改名称的文件列表,大约3000个。
然后,我的perl脚本使用文件列表,通过执行cut-d-f1来获取文件名$pre-eg f123456的第一部分。我还使用cut-d-f2-获得了文件名$post的剩余部分。然后,我使用mv$pre$post生成了一个move语句。我将其输出到一个文件并执行它,但没有一个文件被重命名

在bash中使用参数展开。下面是一个简单的脚本:

for name in *; do
    mv "${name}" "${name#f[0-9]*_}"
done

它将删除前导的f、数字和u。根据您的需要对其进行修改。

请展示您迄今为止所做的尝试,并详细说明您所说的不起作用的确切含义:输入是什么,您预期的输出是什么,实际发生了什么?您的系统上是否有重命名1?感谢无辜的旁观者。那正是我想要的。再一次,我试图把事情复杂化。Thanks@user3120872嗨,没问题。请随意接受答案: