重命名所有文件

如何将当前目录中的所有文件重命名为.tar.gz? 我试过了

find . -iname *.tgz --exec mv {} {}.tar.gz \; 

但并不像预期的那样工作。

方便的是rename .tgz .tar.gz *.tgz

http://linux.die.net/man/1/rename

 ls *.tgz | sed 's/\(.*\).tgz$/mv "&" "\1.tar.gz"/' | sh 
 for i in *.tgz; do mv "$i" "${i/.tgz}".tar.gz; done 

rename是一个不错的。 但是你应该留意Debian衍生产品 – 它们不提供与其他发行版相同的版本。

Debian / Ubuntu /好友:

 # rename 's/\.tgz$/\.tar.gz/ *.tgz 

据我所知,其他人都是 – http://linux.die.net/man/1/rename

 # rename .tgz .tar.gz *.tgz 

你可能需要做这样的事情:

 [rilindo@kvm0001 bar]$ ls -la total 8 drwxr-xr-x. 2 rilindo cgred 4096 Oct 20 23:16 . drwxr-xr-x. 8 rilindo cgred 4096 Oct 20 23:10 .. -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 bar.txt -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 baz.txt -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:16 foo.txt [rilindo@kvm0001 bar]$ for i in `find . -type f -iname "*.txt"`; do j=`echo $i | sed 's/.txt$/.doc/'`; mv $i $j; done [rilindo@kvm0001 bar]$ ls -la total 8 drwxr-xr-x. 2 rilindo cgred 4096 Oct 20 23:16 . drwxr-xr-x. 8 rilindo cgred 4096 Oct 20 23:10 .. -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 bar.doc -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:15 baz.doc -rw-r--r--. 1 rilindo cgred 0 Oct 20 23:16 foo.doc [rilindo@kvm0001 bar]$ 

所以用这个命令string:

 for i in `find . -type f -iname "*.txt"`; do j=`echo $i | sed 's/.txt$/.doc/'`; mv $i $j; done 

我得到文件列表和每个元素,为文件名分配一个新的扩展名到一个variables,并将每个文件重命名为该variables。

当然,这可能不是一个完美的脚本,但我认为你明白了。

我推荐'mmv'。 相对于“for”expression式来说,相当简单并且不太容易出错。