我在Unix目录中有一堆文件:
test_XXXXX.txt
best_YYY.txt
nest_ZZZZZZZZZ.txt
我需要将这些文件重命名为
test.txt
best.txt
nest.txt
我在AIX上使用Ksh。请告诉我如何使用Single命令完成上述操作。
谢谢,
答案 0 :(得分:0)
如果这是一次(或不经常)的场合,我会用
创建一个脚本$ ls > rename.sh
$ vi rename.sh
:%s/\(.*\)/mv \1 \1/
(edit manually to remove all the XXXXX from the second file names)
:x
$ source rename.sh
如果经常发生这种情况,我需要更深入地了解XXXXX,YYY和ZZZZZZZZZZZ是什么。
附录
根据自己的喜好修改:
ls | sed "{s/\(.*\)\(............\)\.txt$/mv \1\2.txt \1.txt/}" | sh
它通过在.txt
之前省略12个字符并将生成的mv
命令传递给shell来转换文件名。
注意:如果存在不匹配的文件名,则执行文件名而不是mv
命令。我省略了一种只选择匹配文件名的方法。
答案 1 :(得分:0)
在这种情况下,您似乎有一个_
来启动您要删除的每个部分。如果是这样,那么这应该有效:
for f in *.txt
do
g="${f%%_*}.txt"
echo mv "${f}" "${g}"
done
如果输出似乎正确,请删除echo
,或将最后一行替换为done | ksh
。
如果文件不是所有.txt
个文件,则更为通用:
for f in *
do
ext="${f##*.}"
g="${f%%_*}.${ext}"
echo mv "${f}" "${g}"
done