Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Shell 如何从目录中的文件名中删除数字前缀?_Shell - Fatal编程技术网

Shell 如何从目录中的文件名中删除数字前缀?

Shell 如何从目录中的文件名中删除数字前缀?,shell,Shell,我的目录里有一些mp3文件。它们的格式如下 9989923_songname.mp3 歌曲名012.mp3 898887888.mp3 songname.mp3 4_songname.mp3 我需要编写一个shell脚本,将“Audio”目录中的文件重命名为以下格式 9989923_songname.mp3->songname.mp3 songname012.mp3->songname1.mp3(如果存在许多同名文件,则为一系列) 898887888.mp3->unknown1.mp3(如果

我的目录里有一些mp3文件。它们的格式如下

  • 9989923_songname.mp3
  • 歌曲名012.mp3
  • 898887888.mp3
  • songname.mp3
  • 4_songname.mp3
  • 我需要编写一个shell脚本,将“Audio”目录中的文件重命名为以下格式

  • 9989923_songname.mp3->songname.mp3
  • songname012.mp3->songname1.mp3(如果存在许多同名文件,则为一系列)
  • 898887888.mp3->unknown1.mp3(如果所有字符都是数字,则为一系列)
  • mysongname.mp3->mysongname.mp3
  • 4_yoursongname.mp3->yoursongname.mp3
  • 如果有重复的名称,那么它将成为一个带有后缀序列号的系列。
    请帮我写这个脚本。(如果您能解释解决方案,我将不胜感激)

    在这里,我创建了一个方法,该方法将以目录名作为第一个参数,并从文件名中删除字符串

    private static void RemovePrefixRecursively(string dirName, string prefix) { DirectoryInfo dirInfo = new DirectoryInfo(dirName); foreach (var file in dirInfo.GetFiles()) { var fileName = file.Name; var fileExtention = file.Extension.TrimStart('.'); fileName = fileName.Replace("." , string.Empty); if(!string.IsNullOrEmpty(fileExtention)) fileName = fileName.Replace(fileExtention, string.Empty); System.IO.File.Move(file.FullName, string.Format("{0}\\{1}.{2}", dirName, fileName.Replace(prefix, string.Empty), fileExtention)); } foreach (var dir in dirInfo.GetDirectories()) { RemovePrefixRecursively(dir.FullName,prefix); } } 私有静态void RemovePrefixRecursive(字符串dirName,字符串前缀) { DirectoryInfo dirInfo=新的DirectoryInfo(dirName); foreach(dirInfo.GetFiles()中的var文件) { var fileName=file.Name; var fileextension=file.Extension.TrimStart('.'); fileName=fileName.Replace(“.”,string.Empty); 如果(!string.IsNullOrEmpty(fileExtension))fileName=fileName.Replace(fileExtension,string.Empty); System.IO.File.Move(File.FullName,string.Format(“{0}\\\{1}.{2}”,dirName,fileName.Replace(前缀,string.Empty),fileextension)); } foreach(dirInfo.GetDirectories()中的var dir) { 递归移除前缀(dir.FullName,prefix); } }
    请帮我写这个脚本。:这不是为我写的吗?这不是一个shell脚本。