我有一个名为 的目录underscore.~1~
,里面有几个文件,名称如 等main.js.~1~
。index.js.~1~
如何将目录underscore
和里面的文件重命名为原来的名称等main.js
?index.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 正则表达式,它描述了要完成的替换。后续参数是要操作的文件名。请注意,为了仅管理一次调用,最后指定目录以避免参数路径扩展发生后其中文件的路径发生更改。