我想更改文件的名称,此更改在中间。我基本上需要删除一部分变量并编写其他内容

i want to change the names of the files and this change is in the middle. i basically need to remove a part of the variable and write something else

我试过了

$ls 
casts.c endian.c ptr.c signed-unsigned-representations.c signed-unsigned.c test-hard-link.c

$for i in *.c;do mv "$i" "$i"__swa.c; done

$ls
casts.c__swa.c endian.c__swa.c ptr.c__swa.c signed-unsigned-representations.c__swa.c signed-unsigned.c__swa.c test-hard-link.c__swa.c

我知道,因为我的 i 变量是 *.c,所以当我尝试重命名并添加 (__swa.c) 部分时,它只是添加到变量名称上。

我需要像这样重命名文件:

casts__swa.c  endian__swa.c  ptr__swa.c  signed-unsigned-representations__swa.c                signed-unsigned__swa.c  test-hard-link__swa.c

使用 Perl 的独立 renameprename 命令:

rename -n 's/\./__swa./' *.c

如果输出看起来没问题,删除 -n

使用 Bash 的 parameter expansion ,你可以这样做:

for f in *.c; do
    echo mv "$f" "${f%%.c}"__swa.c
done

(当然去掉echo,如果看起来像就可以了)

但我通常更愿意使用更灵活的 rename Perl,正如 Cyrus 在回答中所建议的那样。