我試圖修改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