2012-11-12 184 views
0

你好,這是一個簡單的問題,但解決的辦法躲開我的那一刻..Unix命令來更改目錄名稱

我可以找出我要改變名稱的文件夾名稱,我知道命令更改文件夾的名稱是mv

所以從當前目錄,如果我去

ls ~/relevant.directory.containing.directory.name.i.want.to.change 

,而我得到的目錄的名稱叫做說lorem-ipsum-v1-3

但目錄名稱可能會改變未來,但它是在目錄中唯一的目錄: 〜/ relevant.directory.containing.directory.name.i.want.to.change

如何以編程方式改變它像correct-files

一個特定的名字,我可以通過只是在做類似

mv lorem-ipsum-v1-3 correct-files 

做正常,但我要開始自動化,這樣我就不需要繼續複製和粘貼的目錄名...

任何幫助,將不勝感激......

回答

3

喜歡的東西:

find . -depth -maxdepth 1 -type d | head -n 1 | xargs -I '{}' mv '{}' correct-files 

應該做工精細,只要只有一個目錄應該被移動。

+0

不錯。不知道xargs的-I參數。在所有版本的Unix上不存在find-maxdepth。 –

2

如果你是絕對肯定的是,relevant.directory.containing.directory.name.i.want.to.change只包含要重命名的目錄,然後你可以簡單地使用通配符:

mv ~/relevant.directory.containing.directory.name.i.want.to.change/*/ ~/relevant.directory.containing.directory.name.i.want.to.change/correct-files 

這也可以被進一步簡化,使用bash括號擴展,以:

mv ~/relevant.directory.containing.directory.name.i.want.to.change/{*/,correct-files} 
1
cd ~/relevant.directory.containing.directory.name.i.want.to.change 
find . -type d -print | while read a ; 
do 
    mv $a correct-files ; 
done 

注意事項:

  • 沒有錯誤處理
  • 有可能是反轉的參數的MV,所以你可以用它代替while循環xargs的的一種方式,但是這不是標準(據我所知)
  • 沒有參數化
  • 如果有任何子目錄,它將無法工作。 find命令的深度參數(再一次,AFAIK)不是標準的。他們在GNU版本存在,但似乎缺少在Solaris
  • 也許別人...
+0

這是行不通的,因爲'find'也會返回根目錄:〜/ relevant.directory.containing.directory.name.i.want.to.change – dogbane

+0

@dogbane你說得對。固定。還增加了另一個缺陷(!)。 –