我有目录说它/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
我想以最短的方式(可能是单行)重命名所有 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
rename -n 's/(\w+)/XXXXX/' *.csv
-n
开心的时候去掉。尝试:
这个怎么运作:
for f in *.csv; do
*.csv
这将启动所有文件的循环。mv -i -- "$f" "XXXXX-${f#*-}"
这会根据需要重命名文件,在覆盖任何文件之前以交互方式询问。
done
这标志着循环的结束。
例子:
我假设您的所有文件都以 5 个数字字符开头,因此使用cut 命令将初始数字文件替换为“XXXXX”。
下面是命令之前的文件。
下面,一个班轮命令。
下面是命令之后的文件。
参考:
在bash中循环命令输出
bash 中的子字符串
没有叉子:
当您使用 shell 循环时,
mv
每个文件分叉一次。Perl 的rename
命令没有。(Perl 的 rename 命令有一些限制,但在这种特定情况下,这些限制不适用。)
至于
rename
前面显示的命令,是的,它可以工作,但是你会在两种不同的重命名等之间产生混淆。如果你有合适的,很好,但如果没有,这也有效。如果你没有 perl-rename 命令并且无法安装它,你可以这样做:
如您所见,这使用了顶部答案中显示的相同替换。当然 perl-rename 有其他花里胡哨(上面提到的答案,
-n
已经,然后是-0
,-f
等等),而且你需要的越多,你应该安装的越多,而不是以这种方式滚动你自己的.