使用 xargs 重命名一堆文件

A t*_*erd 0 bash shell xargs

我一直在尝试使用 xargs 按正确的顺序重命名一堆文件,但无济于事。在挖掘成堆的类似问题时,我通过使用 sed 和 xargs 找到了答案。新手我想避免使用sed。我想一定有一些更简单的方法。

更具体地说,我有一些文件如下:

Abc.jpg
Def.jpg
Ghi.jpg
Jkl.jpg
Run Code Online (Sandbox Code Playgroud)

我希望它们以有序的方式重命名,例如:

Something1.jpg
Something2.jpg
Something3.jpg
Something4.jpg
Run Code Online (Sandbox Code Playgroud)

xargs命令可以seq实现这一目标吗?如果是这样,我该如何实施?

Joh*_*ger 5

我不知道为什么有人会尝试参与sed其中。可能也不xargsseq或者。这是一段纯 Bash 语句:

(x=1; for f in *.jpg; do mv "$f" "Something$((x++)).jpg"; done)
Run Code Online (Sandbox Code Playgroud)

其核心是对for要重命名的文件进行循环,mv对每个文件执行一个命令。要操作的文件通过单个 glob 表达式来表达,但您也可以单独命名它们、使用多个 glob 或使用多种其他技术之一。变量x用作简单的计数器,在进入循环之前初始化为1。 $((x++))扩展为 的当前值x,副作用是增加x1。整个内容被括在括号中以在子 shell 中运行它,因此其中不会影响主机 shell 环境。(在这种情况下,这意味着它不会x在调用 shell 中创建或修改任何变量。)

如果您将其放入脚本中而不是在命令行中输入,那么将其分成几行会更具可读性:

(
  x=1
  for f in *.jpg; do
    mv "$f" "Something$((x++)).jpg"
  done
)
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以这样输入。