Bash:仅使用$ 1处理一个文件,但全部具有硬编码值

问题描述 投票:0回答:2

此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
bash file-rename
2个回答
1
投票

markp-fuso在他的comment中所说的完全正确。

这是您要在中实现的目标的方式(如果您喜欢结果,请删除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
    

0
投票

考虑rename

© www.soinside.com 2019 - 2024. All rights reserved.