Linux 从所有子目录中的所有mp3文件中删除前3个字符和最后1个字符
在基本目录中,我有如下文件夹:Linux 从所有子目录中的所有mp3文件中删除前3个字符和最后1个字符,linux,bash,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 我试过这个
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
此外,这在子目录中不起作用,只是如果文件在基本目录中,您可以使用此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)
cd/base/dir
而IFS=read-rd“”文件;做
echo mv“$file”“$(sed-E的~(.*/).{3}(+).\.~\1\2.~'如果文件名都具有相同的模式,则可以按以下方式剪切字符:
$ file='0010031.mp3'
$ cut -c4-6,8- <<< "$file"
003.mp3
$file='0010031.mp3'
$cut-c4-6,8-mv./36/0360331.mp3./033.mp3 mv./4/0041091.mp3./09.mp3它应该是mv./4/0041091.mp3./009.mp3如果文件夹名有1个字符,它将重命名为mv./8/0080351.mp3./35.mp3如果文件夹名有2个字符,它将重命名为mv./88/0080351.mp3./035.mp3。它应该从文件名中删除3个字符(不包括目录)对于$(find.-type f-print0)中的i,这个答案中的语法是否优于;是否以某种方式echo mv$i[etc];done
?我需要在基本目录中运行,但要应用于每个子目录,只需使用basename
+dirname
。