如果我们从变量中获取文件,如何 mv(重命名)带有破折号的文件? [重复]

问题描述 投票:0回答:1

我正在尝试使用移动 (mv) 命令重命名文件

$ls

-0
-1
-2

000.json
001.json
002.json

我试过的代码

for i in -*; do
  N=3
  echo mv -v -- "\"""$i""\"" "$(echo "$i" | sed -r ":r;s/\b[0-9]{1,$((N - 1))}\b/0&/g;tr" | sed "s/-//" | sed "s/$/.json/")"
  mv -v -- "\"""$i""\"" "$(echo "$i" | sed -r ":r;s/\b[0-9]{1,$((N - 1))}\b/0&/g;tr" | sed "s/-//" | sed "s/$/.json/")"
done

此代码输出

mv -v -- "-0" 000.json
mv: cannot stat '"-0"': No such file or directory
mv -v -- "-1" 001.json
mv: cannot stat '"-1"': No such file or directory
mv -v -- "-2" 002.json
mv: cannot stat '"-2"': No such file or directory

如果我尝试执行

mv -v -- "-0" 000.json
这有效。但是当我尝试用
mv -v -- "\"""$i""\"" "$(echo "$i" | sed -r ":r;s/\b[0-9]{1,$((N - 1))}\b/0&/g;tr" | sed "s/-//" | sed "s/$/.json/")"
来做的时候。它不会工作。

任何人都可以帮我修复

mv -v -- "\"""$i""\"" ...
这部分命令在哪里
"\"""$i""\""
我只是想添加引号?所以它给
No such file or directory
.

bash shell sed echo mv
1个回答
1
投票

使用 Perl 的

rename

删除

-n
开关,又名dry-run当你的尝试令人满意重命名真实.

rename -n 's/-(\d+)/sprintf("%.3d%s", $1, ".json")/e' ./*
rename(-0, 000.json)
rename(-1, 001.json)
rename(-2, 002.json)
© www.soinside.com 2019 - 2024. All rights reserved.