Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用脚本Shell更改所有我的文件的名称,但使用特定规则_Shell_Parsing_Mv - Fatal编程技术网

使用脚本Shell更改所有我的文件的名称,但使用特定规则

使用脚本Shell更改所有我的文件的名称,但使用特定规则,shell,parsing,mv,Shell,Parsing,Mv,我有一辆车,我的音频帖子只阅读特定顺序的音乐 我有一个很大的音乐列表,我想更改001 | justanexemple.mp3上的每个justanexemple.mp3和002 | I love stackoverflow上的下一个“I love stackoverflow.mp3” 另外,我们有一个限制是当我在009 | music.mp3上时,我想要下一个像这样的010 | music.mp3 我还遇到了一个问题,我有一些空间音乐,比如“我喜欢海龟。mp3” 所以命令mv不起作用 所以我写了这

我有一辆车,我的音频帖子只阅读特定顺序的音乐

我有一个很大的音乐列表,我想更改001 | justanexemple.mp3上的每个justanexemple.mp3和002 | I love stackoverflow上的下一个“I love stackoverflow.mp3”

另外,我们有一个限制是当我在009 | music.mp3上时,我想要下一个像这样的010 | music.mp3

我还遇到了一个问题,我有一些空间音乐,比如“我喜欢海龟。mp3” 所以命令mv不起作用

所以我写了这样的代码

    #!/bin/sh                                                                                   

counter=001

for file in `ls -1 *.mp3 | sort -t. -k 2n` 
do   
newname=$counter'|'.$file   
if [ $file != $newname ]
   then mv $file $newname   
fi   
counter=`expr $counter + 1`   
counter="00${counter}" 
echo $counter done
但这不是很好

我的音乐列表是这样的:

> Kario & Yaret - Somos Lokos (Prod. By Las Ovejas Negras & Gaby.mp3
> Dj_Foxx-T_-_An_Sé_an_Nonm_(feat._Pompis)_-_.mp3
> Harry_Toddler_-_Draw_Mi_Table_wegotitfirst_com.mp3 Kario & Yaret Ft.mp3
> Mc Cassidy Ft. Polakan Y Delirious - Bad Boy.mp3

  • 不要使用字符串连接来格式化数字。使用
    printf
  • 引用你的变量
  • 您的脚本可以编写为:

    c=0
    for i in *.mp3; do
      c=$((c+1))
      pref=$(printf "%03d" $c)
      echo "$i" "${pref}|$i"
    done
    

    如果输出效果良好,请将
    echo
    替换为
    mv
    ,以执行实际重命名。

    您要避免对带有文件名的循环使用
    ,而不要使用
    ls
    生成列表: