此bash代码以硬编码值viz正常工作(重新命名文件)。 ~/Music/*.mp3
。但是当我通过CLI参数时,它无法与files=($1)
一起使用(仅仅处理第一个文件):./rfs.sh ~/Music/*.mp3
rfs.sh
files=(~/Music/*.mp3)
for ((i=0; i<${#files[@]}; i++)); do
oldname="${files[$i]}"
newname=`echo "$oldname" | sed -E 's/\/[0-9]+ /\//'`
echo "$oldname ---> $newname"
mv "$oldname" "$newname"
done
markp-fuso在他的comment中所说的完全正确。
这是您要在bash中实现的目标的方式(如果您喜欢结果,请删除echo
])]
#!/bin/bash for file in "$@"; do dirname=${file%/*} basename=${file##*/} echo mv "$file ${dirname}/${basename//[[:digit:]][[:digit:]]* /}" done
概念证明
$ ls *.mp3
'1234 foo.mp3' '5678 bar.mp3'
$ mp3(){ for file in "$@"; do dirname=${file%/*}; basename=${file##*/}; echo mv "$file ${dirname}/${basename//[[:digit:]][[:digit:]]* /}"; done;}; mp3 ./*.mp3
mv ./1234 foo.mp3 ./foo.mp3
mv ./5678 bar.mp3 ./bar.mp3
考虑perl的rename
: