2011-06-13 51 views
51

重命名以「Unix_」爲前綴的文件夾中的所有文件,即假設文件夾中有兩個文件a.txt和b.pdf,則它們都應重命名從單個命令Unix_a.txt和Unix_b.pdf在單個unix命令中重命名文件夾中的所有文件並使用前綴

+1

檢查此鏈接=> http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html – 2011-06-13 11:02:26

+0

請點擊此處查看:http://theunixshell.blogspot.com/2013/ 01/bulk-renaming-of-files-in-unix.html – Vijay 2013-01-10 06:34:11

回答

47

嘗試rename命令的文件夾與所述文件

rename 's/^/Unix_/' * 

重命名(sed s command)的參數表示來替換正則表達式^Un ix_。脫字號(^)是一個特殊字符,意思是行的開頭

+6

你能解釋一下'/^/.../'的含義嗎? – 2016-12-24 20:07:51

+0

@Matteo'的/^/.../'是[rename命令]的perl表達式參數(http://www.tecmint.com/rename-multiple-files-in-linux/) – RoyalleBlue 2017-01-19 15:38:12

71

如果你的文件名包含沒有whitepace和你沒有任何子目錄,你可以用一個簡單的循環for

$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done 

否則使用便捷rename命令(這是一個Perl腳本) - 儘管它可能在每個Unix上都不可用(例如,OS X不包含rename)。

在debian-administration.org簡短概述:

如果你的文件名包含空格它更容易使用find,在Linux下面應該工作:

$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh 

在BSD系統上,不幸的是沒有-printf選項。但GNU findutils應該可以安裝(例如,在Mac OS X上使用brew install findutils)。

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh 
+0

Will如果任何文件包含空格,則不起作用 – Matteo 2013-08-04 07:23:46

+0

@Matteo:謝謝提示:更新了我的答案,並帶有'find'的兩個示例。 – miku 2013-08-04 10:02:26

+0

也會推薦'for f in *;做[[-f $ {f}]] && mv ...;完成'只捕獲文件(沒有子目錄,鏈接等)... – twalberg 2013-09-04 20:52:34

21

我想這正是你卻被尋找:

ls | xargs -I {} mv {} Unix_{} 

是的,這很簡單,優雅和強大,以及courese的ALOS ONELINE-COMAND。 你可以從我這裏得到更詳細的介紹頁面上:Rename Files and Directories (Add Prefix)

+0

這就是我要找的.... – Green 2017-01-05 10:02:04

0

也適用於項目與空間,而忽略目錄

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done 
6

我最近所面對這個相同的情況下,發現了一個更簡單的解決方案內置。我在這裏分享它,以便它可以幫助其他人尋找解決方案。

藉助OS X Yosemite,Apple已將批量重命名功能直接集成到Finder中。詳細信息可在here。我抄在下面的步驟,以及,

重命名多個項目

  1. 選擇的項目,然後按住Ctrl鍵單擊其中之一。

  2. 在快捷菜單中,選擇重命名項目。

  3. 在重命名文件夾項目下的彈出式菜單中,選擇替換名稱中的文本,將文本添加到名稱或更改名稱格式。

    • 替換文本:在「查找」字段中輸入要刪除的文本,然後在「替換爲」字段中輸入要添加的文本。

    • 添加文本:輸入要在該字段中添加的文本,然後選擇在當前名稱之前或之後添加文本。

    • 格式:選擇文件的名稱格式,然後選擇在名稱前後放置索引,計數器或日期。在自定義格式字段中輸入一個名稱,然後輸入您想要開始的號碼。

  4. 單擊重命名。

如果您的文件中有一個常見模式,那麼您可以使用替換文本,否則添加文本也可以完成這項工作。

+0

優秀 - 爲我節省了很多時間! – user3000868 2016-07-25 22:51:02

0

隨着rnm(你需要安裝它):

rnm -ns 'Unix_/fn/' * 

或者

rnm -rs '/^/Unix_/' * 

P.S:我是這個工具的作者。

+1

您應該通讀所有有關您的實用程序的答案,並添加您是其作者的免責聲明。 – Mogsdad 2016-05-07 14:32:02

+0

@Mogsdad:我不認爲它是必要的信息。如果有人想找到作者,這很容易。 – Jahid 2016-05-09 13:03:08

3

你可以只使用-i代替-I {}

ls | xargs -i mv {} unix_{} 

這也完美的作品。

  • ls - 列出了目錄
  • xargs所有文件 - 接受由行中的所有文件系由於-i選項
  • {}是所有文件的佔位符,必要的,如果xargs獲得兩個以上的參數作爲輸入

用awk:

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh 
+0

'-i'已被棄用,現在只是'-I' – JamPow 2017-05-04 12:41:43

+0

它幫助我在Debian 8.Thaks – MinMaxUz 2017-11-30 16:38:53

相關問題