如何将当前目录中的所有文件重命名为.tar.gz? 我试过了
find . -iname *.tgz --exec mv {} {}.tar.gz \;
但并不像预期的那样工作。
方便的是rename .tgz .tar.gz *.tgz
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式来说,相当简单并且不太容易出错。