[英]Rename all files in a folder with a prefix in a single command
重命名文件夾中的所有文件,前綴為"Unix_"
假設一個文件夾有兩個文件
a.txt
b.pdf
那么它們都應該從一個命令重命名為
Unix_a.txt
Unix_b.pdf
如果您的文件名不包含空格並且您沒有任何子目錄,則可以使用簡單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
在包含文件的文件夾中嘗試rename
命令:
rename 's/^/Unix_/' *
rename 參數( sed s 命令)表示將正則表達式^替換為Unix_ 。 插入符號 (^) 是一個特殊字符,表示行首。
我認為這正是您正在尋找的:
ls | xargs -I {} mv {} Unix_{}
是的,它簡單而優雅,功能強大,而且是單行的。 您可以在頁面上從我這里獲得更詳細的介紹: 重命名文件和目錄(添加前綴)
我最近遇到了同樣的情況,並找到了一個更簡單的內置解決方案。 我在這里分享它,以便它可以幫助其他人尋找解決方案。
在 OS X Yosemite 中,Apple 已將批量重命名功能直接集成到 Finder 中。 詳細信息可在此處獲得。 我也復制了以下步驟,
重命名多個項目
Select 項目,然后按住 Control 鍵單擊其中一項。
在快捷菜單中, select 重命名項目。
在“重命名文件夾項目”下方的彈出菜單中,選擇替換名稱中的文本、向名稱中添加文本或更改名稱格式。
替換文本:在“查找”欄中輸入要刪除的文本,然后在“替換為”欄中輸入要添加的文本。
添加文本:在字段中輸入要添加的文本,然后選擇在當前名稱之前或之后添加文本。
格式:選擇文件的名稱格式,然后選擇將索引、計數器或日期放在名稱之前或之后。 在“自定義格式”字段中輸入名稱,然后輸入要開始的數字。
單擊重命名。
如果您的文件中有一個通用模式,則可以使用替換文本,否則添加文本也可以完成這項工作。
您可以只使用-i
而不是-I {}
ls | xargs -i mv {} unix_{}
這也很完美。
ls
- 列出目錄中的所有文件xargs
- 由於-i
選項,逐行接受所有文件{}
是所有文件的占位符,如果xargs
獲得兩個以上的 arguments 作為輸入,則必須這樣做使用 awk:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
也適用於帶有空格的項目並忽略目錄
for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
情況:
我們在/user/ssl/
中有certificate.key
certificate.crt
我們想將任何以certificate
開頭的內容重命名為certificate_OLD
我們現在位於/user
首先,您使用-n
進行試運行:
rename -n "s/certificate/certificate_old/"./ssl/*
返回:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
您的文件將保持不變,這只是一個測試運行。
解決方案:
當您對測試結果感到滿意時,請真正運行它:
rename "s/certificate/certificate_OLD/"./ssl/*
這是什么意思:
`重命名“s/SOMETHING/SOMETHING_ELSE”路徑/文件
小費:
如果您已經在路徑上,請像這樣運行它:
rename "s/certificate/certificate_OLD/" *
或者,如果您想在任何以ss
開頭的子目錄中執行此操作,請執行以下操作:
rename -n "s/certificat/certificate_old/"./ss*/*
你也可以這樣做:
rename -n "s/certi*/certificate_old/"./ss*/*
這會重命名以ss
開頭的任何子目錄中以certi
開頭的任何內容。
天空才是極限。
使用正則表達式並始終在使用-n
之前對其進行測試。
注意這甚至會重命名匹配的文件夾名稱。 最好cd
進入目錄並在那里執行。 使用風險自負。
find -execdir rename
這將使用僅影響基本名稱的正則表達式重命名文件和目錄。
所以對於一個前綴,你可以這樣做:
PATH=/usr/bin find . -depth -execdir rename 's/^/Unix_/' '{}' \;
或僅影響文件:
PATH=/usr/bin find . -type f -execdir rename 's/^/Unix_/' '{}' \;
-execdir
首先cd
進入目錄,然后僅在基本名稱上執行。
我在以下位置進行了更詳細的解釋: 在 Linux 中查找多個文件並重命名它們
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.