如何将当前目录中所有扩展名为 .tgz 的文件重命名为 .tar.gz?我试过了
find . -iname *.tgz --exec mv {} {}.tar.gz \;
但它没有按预期工作。
答案1
方便的是rename .tgz .tar.gz *.tgz
答案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
我获取文件列表,并针对每个元素,将带有新扩展名的文件名分配给一个变量,并将每个文件重命名为该变量。
当然,这可能不是一个完美的脚本,但我想你明白了。