从所有子目录中的所有mp3文件中删除前3个字符和最后1个字符

时间:2018-04-27 20:36:52

标签: linux bash

在基本目录中我有这样的文件夹:

1
2
3
4
5
10
110

所以每个人都有像

这样的文件
  0010011.mp3  0010031.mp3  0010051.mp3  0010071.mp3  0010021.mp3  0010041.mp3  0010061.mp3

所以我想删除前3个字符和最后1个字符,所以文件看起来像这样

 001.mp3   003.mp3   005.mp3   007.mp3   002.mp3   004.mp3  006.mp3

我试过这个

for file in ??????*; do echo mv $file `echo $file | cut -c4-`; done

这也不适用于子目录,只是文件位于基目录

2 个答案:

答案 0 :(得分:2)

你可以使用while while循环:

cd /base/dir

while IFS= read -rd '' file; do
   echo mv "$file" "$(sed -E 's~(.*/).{3}(.+).\.~\1\2.~' <<< "$file")"
done < <(find . -type f -print0)

对结果感到满意后,请在echo命令之前删除mv

答案 1 :(得分:0)

如果文件名都具有相同的模式,您可以通过这种方式剪切字符:

$ file='0010031.mp3'
$ cut -c4-6,8- <<< "$file"
003.mp3