shell 如何mv(重命名)一个文件,统计与破折号,如果我们得到的文件从一个变量?[复制]

aurhwmvo  于 2023-03-09  发布在  Shell
关注(0)|答案(1)|浏览(112)
    • 此问题在此处已有答案**:

How to delete file whose name begins with "--"? [duplicate](3个答案)
2天前关闭。
我正在尝试使用move(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

uhry853o

uhry853o1#

基本上,要避免以破折号-开头的文件出错,请用途:
command -- *
command ./*

使用Perl的rename
删除-n交换机,也就是 * 试运行 *,当您的尝试令人满意**时,才真正重命名真实的 *。

rename -n 's/-(\d+)/sprintf("%.3d%s", $1, ".json")/e' ./*
rename(-0, 000.json)
rename(-1, 001.json)
rename(-2, 002.json)

相关问题