在一个文件夹中,我有很多用数字序列化的音频文件,它们都是mp3格式的,然后在同一个文件夹中,我有很多子文件夹--所有的子文件夹都有数字和斜杠,以及随后的字符--我想通过终端命令将数字化的音频文件批量地移到这个文件夹中,从相应的数字开始。目前,我用的是一个杆的运动,方法如下。
mv 1.mp3 1-*
mv 2.mp3 2-*
mv 3.mp3 3-*
mv 4.mp3 4-*
mv 5.mp3 5-*
mv 6.mp3 6-*
mv 7.mp3 7-*
mv 8.mp3 8-*
mv 9.mp3 9-*
mv 10.mp3 10-*
mv 11.mp3 11-*
mv 12.mp3 12-*
mv 13.mp3 13-*
mv 14.mp3 14-*
mv 15.mp3 15-*
mv 16.mp3 16-*
mv 17.mp3 17-*
mv 18.mp3 18-*
mv 19.mp3 19-*
mv 20.mp3 20-*
mv 21.mp3 21-*
mv 22.mp3 22-*
mv 23.mp3 23-*有办法用一个代码来完成吗?
发布于 2022-09-03 12:51:05
您可以在没有内部循环的情况下这样做:
for mp3 in *.mp3; do
subdir=( ${mp3%.*}-* ) # Create array of subdirs if there are many
[[ -d $subdir ]] && mv "$mp3" "$subdir/" # Check if $subdir exists than mv
done您还可以循环使用子目录,而不是.mp3:
for subdir in *[0-9]-*; { mv "${subdir%-*}.mp3" "$subdir"; }发布于 2022-09-03 12:18:57
for file in *.mp3; do
b="${file%.mp3}"
for d in "$b"-*; do
mv "$file" "$d"
break
done
done内部循环是为了确保通配符展开到恰好一个匹配,或者移动到第一个匹配。您还可能希望确保目标是目录。
https://stackoverflow.com/questions/73592116
复制相似问题