rename 后缀

时间:2022-05-07 19:28:43

for file in $(find . -name "*.del" -type f);do mv "$file" "${file%.del}";done

file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.}:拿掉第一个 .  及其左边的字符串:file.txt
${file##*.}:拿掉最后一个 .  及其左边的字符串:txt
${file%/*}:拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:拿掉第一条 / 及其右边的字符串:(空值)
${file%.*}:拿掉最后一个 .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一个 .  及其右边的字符串:/dir1/dir2/dir3/my

//集体增加后缀
find . ! -type d |xargs -i mv {} {}.c;
find . ! -type d -exec mv -f {} {}.suf \;

要想把my.file.txt 变成 my.file.cpp
mv "$file" "${file%.*}.cpp"

一.rename解决

1.  Ubuntu系统下

rename 's/\.c/\.h/'  ./*

把当前目录下的后缀名为.c的文件更改为.h的文件

2.  CentOS5.5系统下

rename .c  .h   *.c

把当前目录下的后缀名为.c的文件更改为.h的文件

二.shell 脚本解决

#!/bin/bash

#http://blog.csdn.net/longxibendi
find ./ -name *.c  | while read i
do
        echo "$i";
        mv $i.c  $i.h
done

三.find  xargs 解决

find ./ -name "*.c" | awk -F "." '{print $2}' | xargs -i -t mv ./{}.c  ./{}.h

注意,第三种方案是递归的更改,会更改当前目录下及其子目录下所有匹配文件