如何将*.~1~后缀的文件和目录重命名为原名?

如何将*.~1~后缀的文件和目录重命名为原名?

我有一个名为 的目录underscore.~1~,里面有几个文件,名称如 等main.js.~1~index.js.~1~

如何将目录underscore和里面的文件重命名为原来的名称等main.jsindex.js

答案1

最简单的方法(在 bash 中)是切换到目录并执行如下操作:

for i in *.~1~; do mv $i ${i%.~1~}; done

上面的代码将迭代所有*.~1文件并将它们移动到不带扩展名的等效文件(由${i%.~1~}目标指定)。查找 shell 的文本替换。

您可以对目录执行类似的操作,但如果那里只有一个目录,则手动执行会更简单

mv underscore.~1~ underscore

答案2

在终端中,您不能简单地使用mv命令移动文件夹和文件吗?

例子

$ find adir_.~1~/ -ls
10757186    4 drwxrwxr-x   2 saml     saml         4096 Oct 14 23:54 adir_.~1~/
10370964    0 -rw-rw-r--   1 saml     saml            0 Oct 14 23:50 adir_.~1~/afile_.~1~

现在移动目录+文件:

$ mv adir_.~1~/ adir
$ mv adir/afile_.~1~ adir/afile

并确认:

$ find adir/ -ls
10757186    4 drwxrwxr-x   2 saml     saml         4096 Oct 15 00:01 adir/
10370964    0 -rw-rw-r--   1 saml     saml            0 Oct 14 23:50 adir/afile

答案3

如果您想一次性重命名所有文件和目录,可以使用rename命令,至少在基于 Debian 的 Linux 发行版上包含在perl软件包中:

rename 's/\.~1~$//' */*.~1~ underscore.~1~

第一个参数rename是 Perl 正则表达式,它描述了要完成的替换。后续参数是要操作的文件名。请注意,为了仅管理一次调用,最后指定目录以避免参数路径扩展发生后其中文件的路径发生更改。

相关内容