2016-07-04 57 views
1

我使用的是RHEL 5.10,我試圖從一堆文件中刪除動態日期擴展。Unix:使用動態擴展重命名文件

文件格式與filename01.gz.20160704類似,其中最後一部分date是動態的。我希望當我嘗試重命名象下面它被重命名爲filename01.gz

,它的工作原理

rename gz.20160704 gz filename01.gz.20160704 

輸出:filename01.gz

但是,當我試圖重命名這個樣子不行

rename gz.* gz filename01.gz.20160704 

我試過尋找其他的答案,在其中一些,他們使用重命名像下面,但可悲的是,這也不適合我。

rename 's/gz*/gz/' filename01.gz.20160704 
rename 's/gz.*/gz/' filename01.gz.20160704 

man頁我的Linux說

For example, given the files foo1, ..., foo9, foo10, ..., foo278, the commands 
      rename foo foo0 foo? 
      rename foo foo0 foo?? 

可能有人請幫我一下吧或者是有任何替代方法可以使用嗎?


更新:添加@PSkocik給出的解決方案,但它也不起作用。

$> ls -ltr filename01* 
-rw-rw----+ 1 foo foo 0 Jul 4 08:34 filename01.gz.20160704 
$> rename -n 's/\.gz\.[^.]*/.gz/' filename01.gz.* 
$> echo $? 
0 
$> ls -ltr filename01* 
-rw-rw----+ 1 foo foo 0 Jul 4 08:34 filename01.gz.20160704 

回答

1
  1. prename(Perl的重命名):

    rename -n 's/\.gz\.[^.]*/.gz/' filename01.gz.* 
    
  2. 使用mv和POSIX殼:

    for f in *.gz.*; do mv "$f" "${f%.*}"; done 
    
+0

可悲它不工作要麼。我用問題的屏幕grep更新瞭解決方案。 – Utsav

+0

如果我按'filename01.gz.20160704'然後執行上面的命令,我會按照預期將'filename01.gz.20160704改名爲filename01.gz'。我的'rename'是一個到'/ usr/bin/prename'的鏈接(perl rename)。應該有另一個具有不同語法的'rename'實用程序(請參閱http://unix.stackexchange.com/questions/98070/rename-files-in-directory),但我不熟悉它。 – PSkocik

+0

不幸的是,我在RHEL機器上看不到任何'prename'。讓我們看看我/別人能否找到一個方法,否則我會寫一個shell並將'date'放入一個變量中,並使用它,這應該起作用。無論如何感謝您的答案。 – Utsav