我正在尝试确定一种 perl 方法来将扩展名添加到文件列表中。我已经可以将具有特定扩展名的文件列表重命名为其他扩展名,但我需要能够对任何文件名执行此操作,无论它是否已经具有扩展名。
例如,我有一个文件列表,例如:
file1
file2
file3
ps.dir
我想将它们全部重命名为filename.extension
:
file1.bad
file2.bad
file3.bad
ps.dir.bad
答案1
在 shell 中,如果您rename
安装了 Perl(有时称为prename
):
rename -v 's/$/.bad/' *
如果您有太多文件,shell *
glob 无法处理所有文件,您可以find
像这样混合匹配(如果需要,也可以替换+
为):\;
find . -maxdepth 1 -exec rename -v 's/$/.bad/' {} +
对于 Perl,只需move
从标准模块中使用:
use File::Copy;
for (<*>) { move($_, "$_.bad"); }
答案2
假设文件名中没有空格:
for file in *; do mv "${file}" "${file}.bad"; done
答案3
[ ! . -sf / ] &&
mkdir ../bad &&
pax -rwls/$/.bad/ . ../bad
.
这将创建一个硬链接镜像../bad
。植根于 的每个文件.
随后也可以在其中找到,../bad
但名称带有附录.bad
。如果新树满足,则删除当前树及其上方的树mv
。../bad