我在 Unix 目录中有一堆文件:
test_XXXXX.txt
best_YYY.txt
nest_ZZZZZZZZZ.txt
我需要将这些文件重命名为
test.txt
best.txt
nest.txt
我在 AIX 上使用 Ksh。请让我知道如何使用单个命令完成上述操作。
谢谢,
我在 Unix 目录中有一堆文件:
test_XXXXX.txt
best_YYY.txt
nest_ZZZZZZZZZ.txt
我需要将这些文件重命名为
test.txt
best.txt
nest.txt
我在 AIX 上使用 Ksh。请让我知道如何使用单个命令完成上述操作。
谢谢,
在这种情况下,您似乎必须_
开始要删除的每个部分。如果是这样的话,那么这应该工作:
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
如果这是一次(或不经常)场合,我会创建一个脚本
$ 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
它通过在前面省略 12 个字符.txt
并将生成的mv
命令传递给 shell 来转换文件名。
注意:如果有不匹配的文件名,它会执行文件名而不是mv
命令。我省略了一种只选择匹配文件名的方法。