所以我的具体问题是我下载了几张mp3专辑,他们的标题中没有曲目编号,因此默认为字母排序,这显然不太理想。我希望能够使用终端命令快速重命名它们,我使用通配符来排序绒毛。所以我从几个角度尝试了这个没有成功,并希望得到一些指导。
一方面,我想尝试mv *someSongN* 01-{reference original name here}
之类的东西。在mv
的第二个参数中,我不清楚我如何引用原始文件名,但前缀为01-
。
我尝试的另一个方法是创建一个临时bash变量,然后是mv
命令。我通过创建没有任何扩展名的测试文件(touch test
)对此进行了测试。我发现echo
和mv
对通配符的处理方式不同。因此,假装测试文件是开始te-- ... var=te*; echo $var
的目录中唯一返回test
,但var=te*; mv $var $var.txt
返回te*.txt
。那么我在这里使用什么策略。我也可以使用图形文件管理器来完成这项任务,但我之前已经完成了这项工作,并且发现它非常无聊。
答案 0 :(得分:0)
以下是使用find
命令
#!/bin/bash
if [[ $1 = "" ]] ; then
echo "Please run the command specifying the filename you are searching for..."
exit
fi
for i in $(find . -type f -name "$1" | tr -d './') ; do
echo ${i}
mv ${i} 01-${i}
done
然后你会跑......
./scriptName "*someSongN*"
答案 1 :(得分:0)
将其作为批处理进行。创建一个包含fromName toName列的映射文件,运行一个脚本进行重命名。
while read a b; do mv "$a" "$b"; done < filemap
创建filemap,ls并粘贴
ls -1 > files; paste files files > filemap; rm files
并手动编辑filemap文件以添加所需的前缀。
答案 2 :(得分:0)
当您只想移动一个文件时,可以创建(内联)函数,如
$ mvd() { mv $1 $2$1; }
并像
一样使用它$ mvd test.mp3 01-
将文件test.mp3
移至01-test.mp3
。
通过使用find
,您可以对多个文件执行此操作,但这将导致所有文件仅以一个前缀(find . -type f -name ${pattern} -exec mvd {} ${prefix}
)开头。
另一种选择是使用find . -type f -name ${pattern}
并使用for
进行迭代。然后,您可以实现一个计数器:
$ i=0; for file in $(find . -type f -name ${pattern}); do mv $file $i-$file; let i+=1; done
问候 费边