重命名所有文件

重命名所有文件

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

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

但它没有按预期工作。

答案1

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

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

答案2

ls *.tgz | sed 's/\(.*\).tgz$/mv "&" "\1.tar.gz"/' | sh

答案3

for i in *.tgz; do mv "$i" "${i/.tgz}".tar.gz; done

答案4

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

[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]$ 

因此使用这个命令字符串:

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

我获取文件列表,并针对每个元素,将带有新扩展名的文件名分配给一个变量,并将每个文件重命名为该变量。

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

相关内容