如何减少目录中每个文件名中的数字?

use*_*636 1 bash sed

在我的终端上运行“ls -lrt”,我得到一个看起来像这样的大列表:

-rw-r--r--  1 pratik  staff   1849089 Jun 23 12:24 cam13-vid.webm
-rw-r--r--  1 pratik  staff   1850653 Jun 23 12:24 cam12-vid.webm
-rw-r--r--  1 pratik  staff   1839110 Jun 23 12:24 cam11-vid.webm
-rw-r--r--  1 pratik  staff   1848520 Jun 23 12:24 cam10-vid.webm
-rw-r--r--  1 pratik  staff   1839122 Jun 23 12:24 cam1-vid.webm
Run Code Online (Sandbox Code Playgroud)

我只是在上面展示了其中的一部分作为示例。

我想重命名所有文件,使其比当前文件少一个。

例如,

mv cam1-vid.webm cam0-vid.webm
mv cam2-vid.webm cam1-vid.webm
.....
....
mv cam 200-vid.webm cam199-vid.webm
Run Code Online (Sandbox Code Playgroud)

如何使用 os x / linux bash 脚本(可能使用 sed)完成此操作?

tha*_*guy 6

你可以用普通的 bash 做到这一点:

for i in {1..200}
do
    mv "cam${i}-vid.webm" "cam$((i-1))-vid.webm"
done
Run Code Online (Sandbox Code Playgroud)

  • 这可能很危险。由于语言环境相关的整理顺序,您可能最终会在处理“cam10-vid.webm”之前处理“cam9-vid.webm”,这将覆盖后者......总体思路很好,但我认为它需要一些数字排序来生成文件列表,而不是简单的`for file in ...`。 (4认同)