我试图修改test.tar.gz到test.tgz中,但它没有工作。这里是命令:重命名一个文件,只在点后修改
temporalFolder= /home/albertserres/*.tar.gz
subprocess.call(["mv",temporalFolder,"*.tgz"])
它给我错误,该文件不存在。为什么?
此外,我只需要修改后的点,而不是整个名称,因为我可能不知道文件名,如果我* * .tgz重命名文件* .tgz,我想保留原来的名字。
我试图修改test.tar.gz到test.tgz中,但它没有工作。这里是命令:重命名一个文件,只在点后修改
temporalFolder= /home/albertserres/*.tar.gz
subprocess.call(["mv",temporalFolder,"*.tgz"])
它给我错误,该文件不存在。为什么?
此外,我只需要修改后的点,而不是整个名称,因为我可能不知道文件名,如果我* * .tgz重命名文件* .tgz,我想保留原来的名字。
rename
可能会更容易。
rename 's/\.tar\.gz/\.tgz/' *.tar.gz
在你的情况
params = "rename 's/\.tar\.gz/\.tgz/' /home/albertserres/*.tar.gz"
subprocess.call(params, shell=True)
要注意,有几个'rename'命令,例如''util_linux'包中的''rename'具有不同的语法](http: //man7.org/linux/man-pages/man1/rename.1.html) – jfs 2015-04-03 19:00:06
这应该工作:
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)
它可能会替换文件名中间的'tar.gz'。另外,如果'new_file'碰巧是一个目录,'orig_file'就会被移动*而不是重命名。你可以[在这里使用'os.rename()'](http://stackoverflow.com/a/29438393/4279)。 – jfs 2015-04-03 19:23:53
全部更换.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上静静地替换该文件。
您是否尝试过在命令行中执行此命令?它也会在那里失败。你需要指定目标文件名,而不用'*' – hitzg 2015-04-02 12:39:12
在命令行中它的工作原理就是它不适用于subprocess.call – user2911701 2015-04-02 12:41:19
所以你说'mv /home/albertserres/*.tar.gz * .tgz'适合你?你使用什么操作系统? – hitzg 2015-04-02 12:42:03