2015-04-02 96 views
-1

我试图修改test.tar.gz到test.tgz中,但它没有工作。这里是命令:重命名一个文件,只在点后修改

temporalFolder= /home/albertserres/*.tar.gz 
subprocess.call(["mv",temporalFolder,"*.tgz"]) 

它给我错误,该文件不存在。为什么?

此外,我只需要修改后的点,而不是整个名称,因为我可能不知道文件名,如果我* * .tgz重命名文件* .tgz,我想保留原来的名字。

+0

您是否尝试过在命令行中执行此命令?它也会在那里失败。你需要指定目标文件名,而不用'*' – hitzg 2015-04-02 12:39:12

+0

在命令行中它的工作原理就是它不适用于subprocess.call – user2911701 2015-04-02 12:41:19

+0

所以你说'mv /home/albertserres/*.tar.gz * .tgz'适合你?你使用什么操作系统? – hitzg 2015-04-02 12:42:03

回答

2

rename可能会更容易。

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

在你的情况

params = "rename 's/\.tar\.gz/\.tgz/' /home/albertserres/*.tar.gz" 
subprocess.call(params, shell=True) 
+0

要注意,有几个'rename'命令,例如''util_linux'包中的''rename'具有不同的语法](http: //man7.org/linux/man-pages/man1/rename.1.html) – jfs 2015-04-03 19:00:06

2

这应该工作:

import shutil 

orig_file = '/home/albertserres/test.tar.gz' 
new_file = orig_file.replace('tar.gz', 'tgz') 
shutil.move(orig_file, new_file) 

如果你想这样做的几个文件:

import shutil 
import glob 

for orig_file in glob.glob('/home/albertserres/*.tar.gz'): 
    new_file = orig_file.replace('tar.gz', 'tgz') 
    shutil.move(orig_file, new_file) 
+0

它可能会替换文件名中间的'tar.gz'。另外,如果'new_file'碰巧是一个目录,'orig_file'就会被移动*而不是重命名。你可以[在这里使用'os.rename()'](http://stackoverflow.com/a/29438393/4279)。 – jfs 2015-04-03 19:23:53

1

全部更换.tar.gz文件扩展名在给定的目录(类似@hitzg's answer.tgz文件扩展名:

#!/usr/bin/env python 
from glob import glob 

for filename in glob(b'/home/albertserres/*.tar.gz'): 
    new = bytearray(filename) 
    new[-len(b'tar.gz'):] = b'tgz' 
    os.rename(filename, new) # or os.replace() for portability 

的代码只在名称末尾取代tar.gz。如果new是一个现有的目录,它会引发一个错误,否则它会在Unix上静静地替换该文件。