如何同时重命名目录中的多个文件

Roc*_*y86 12 shell rename files

我有目录说它/var/tmp/abc有 4 个文件:

12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Run Code Online (Sandbox Code Playgroud)

我想以尽可能短的(可能是单行)方式重命名所有 CSV 文件(找到所有文件并重命名它们):

XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
Run Code Online (Sandbox Code Playgroud)

SHa*_*den 15

rename -n 's/(\w+)/XXXXX/' *.csv

删除-n快乐时。

  • @danieldeveloper001 您使用的是`rename` 还是`prename`?看我上面的评论。`man {命令}` 在末尾列出了作者。 (3认同)
  • 对于合适的“重命名”版本。我假设这是 Larry Wall 的 `rename`,来自 Debian 和衍生产品中的 `rename` 包(以及 RedHat 说服系统上的 IIRC `prename`)。一个非常有用的工具。 (2认同)
  • arch linux中的`perl-rename` (2认同)
  • **这只适用于 Debian 派生系统。** Fedora 派生系统有一个完全不同的 `rename` 命令;见 https://unix.stackexchange.com/a/238862/135943 (2认同)

Joh*_*024 11

尝试:

for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  • for f in *.csv; do

    这将开始对所有*.csv文件进行循环。

  • mv -i -- "$f" "XXXXX-${f#*-}"

    这会根据需要重命名文件,在覆盖任何文件之前以交互方式询问。

  • done

    这标志着循环的结束。

例子:

$ ls -1
11234-cam-yy3r5-ro9490-85adu9.csv
12345-ram-3e3r5-io9490-89adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
45434-dam-qwe35-to9490-43adu9.csv
$ for f in *.csv; do mv -i -- "$f" "XXXXX-${f#*-}"; done
$ ls -1
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
Run Code Online (Sandbox Code Playgroud)