#!/bin/bash# this script name is modmv cd $1for filename in *do prefix=`echo $filename | sed -e 's/消消^\([^.]*\.[^.]*\.\).*$/\1/'` suffix=`echo $filename | sed -e 's/^.*\(\.[^.]*\)$/\1/'` mv $filename "$prefix`date "+%Y%m%d%H%M%S"`$suffix"done bash $ modmv /temp # 執行上拿數知面的腳本。 !!!! 本人條件有限。 此腳本未經過測畢裂試。 後果自負。 請自行調試。
Ⅱ linux下如何給多個文件同時改名啊
使用硬鏈接
先看概念:通過索引節點來進行的連接。在Linux的文件系統中回,保存在磁碟答分區中的文件不管是什麼類型都給它分配一個編號,稱為索引節點號(InodeIndex)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種連接就是硬連接。
由於指向同一個節點,所以改變一個,其他的也會隨之改變。 不過你得先建立硬鏈接。如下是對文件 oldfile 創建硬鏈接:
link oldfile newfile
ln oldfile newfile
使用腳本來進行批處理
在一個腳本裡面添加多條 rm 或 remove 命令,然後運行這個腳本,以後就能一次性修改這些文件名。
Ⅲ linux 下對文件重命名
1、首先我們需復要打開linux客戶端進制入軟體主界面。
Ⅳ 怎麼用shell腳本將文件名改名
修改文件名可以有不同的命令方式,比如rename, mv都可以實現
對於單個的文件,可以直接使用以上的命令,那如果有大量的類似格式的文件名需要修改成其他格式的,該如何呢?
比如某次測試後,保存的文件為 Lan1.txt, Lan2.txt,....Lan100.txt
這一百個文件需要在前面添加前綴變成類似 ch7_Lan1.txt,如果你還想使用mv來一個一個...多痛苦啊
當前文件夾下,文件修改有4種方式
1. 使用while Loop加 ${//}來實現Lan到 ch7_Lan的替換
點擊(此處)折疊或打開
find . -name "Lan*txt" -type f | read files
do
new=${files/Lan/ch7_Lan}
mv $files $new
done
2. 充分利用 awk的分隔符功能來實現
點擊(此處)折疊或打開
ls *Lan* | awk 'BEGIN{FS="Lan";OFS="ch7_Lan"}{printf "mv "$0" ";$1=$1;print $0}' | sh
首先,修改 FS和 OFS,輸入和輸出的分隔符
其次,使用 awk中的命令,拼接 「mv Lan1.txt ch7_Lan1.txt」這條命令
最後,使用|sh來執行一個 shell命令來完成 mv動作
其中,$1=$1是必須的,這個是完成 Lan===> ch7_Lan的關鍵(其實是可以使用 $2=$2等來替換,只要一個賦值動作而已)
奇怪的是,難道沒有賦值動作,分隔符的改變就不能檢測出來么??
3. 使用 awk的內置命令,gsub和 system來實現替換和命令執行
點擊(此處)折疊或打開
ls "*Lan*" | awk '{org=$0;gsub("Lan", "ch7_Lan");system("mv "org" "$1)}'
首先保存原始的數據
其次修改 Lan為 ch_Lan
最後執行mv動作
Ⅳ 誰知道linux 文件批量復制腳本 把1個復製成不同名字的多個。批量修改文件內容腳本,替換指定的字元。
一個復復制多個
#!制/bin/bash
#a..z代表從字面a到z的26個名字 替換成你要的名字即可 名字之間留空格
#比如 for i in 張三 李四 王五
for i in {a..z}
do
cp -pv 你的文件名 $i
done
修改文件內容
#!/bin/bash
for i in 文件1 文件2 文件3
do
sed -i 's/被替換的字元/替換成的字元/g' $i
done
你的問題能描述的清楚點么。。。
到底是本目錄下一個文件復制多個 還是 多個文件復制多個
Ⅵ Linux系統中給文件改名的命令是什麼/
linux的文件重命名非常簡單。常用的是mv命令和rename命令。下面介紹一下這兩個命令的用法,具體結節可以參考手冊。
1、mv
mv fromfile tofile
如把文件a.txt得命名為b.txt,可以是mv a.txt b.txt。
mv一次只能重命名一個文件,而且,它是移動命令。如果tofile已經存在的話,會直接裝原文件覆蓋,從而造成文件的丟失。當然有選項可以對已存在的文件進行提示,但是,我表示,那個選項我還真不常用。綜合這兩點考慮,還是決定看看rename吧。
2、rename
rename frompart topart filename 或者 rename 's/frompart/topart/' filename
如把文件a.txt得命名為b.txt,可以是rename 'a' 'b' a.txt (這個沒有試過,看網上別人說的,是這樣子的。)還可以是:rename 's/^a/b/' a.txt
在有的系統之上,用前面的那句可以通過,在有的系統之上,用後面的這個可以通過。兩個不一樣,一個是C的,一個是perl的。明顯看出,後面這條是正則表達式的寫法。具體採用哪一種方式,可以man rename,在手冊頁的最後一行看版本。由於我使用的系統rename的版本是Perl的,所以我只能採用後面的這一種方式。
rename 強大 的地方在於,你可以使用*,?等,對所有符合條件的文件名進行批量修改。而你在使用mv的時候,只能採用寫腳本,用循環的方式來解決。
Ⅶ windows與linux下 如何批量更改文件名
提供一個在Linux下使用Shell腳本來批量改名的方法,我很久不用Windows系統了,所以只有Linux下的方法。
我這邊在Linux下的測試過程是下面這樣的:
「0」提醒:在終端terminal中,第一步就是把當前目錄切換到文件所在目錄,用cd命令。
「1」新建文件夾,起名為「rename_by_source」,用來放置「改名前的文件」、「shell腳本文件」、「文件名對應文件」,以及保存「改名後的文件」。你在自己電腦上操作時,也建議你把下載下來的需要改名的文件放到一個單獨的文件夾里,這樣容易查看一些。
「2」我新建的「rename_by_source」文件夾中,根據你給的文件名對應表,新建了4個「改名前的文件」,它們是空白文件,只是有個文件名而已,另外,估計文件類型是mp3文件,所以後綴名是.mp3,如果你的文件不是mp3類型的話,請屆時自行在shell腳本文件里更改相關的代碼行。
「3」在文件夾中,新建了「source_name.txt」文件,用來放置(改名前)與(改名後)的對應文件名,跟你給的圖片一樣,也是一行對應一個文件的,只不過,把ren那一列刪除了。如果你要直接使用下面提供的shell腳本的話,也請把你的文件名對應文件中的ren那一列刪除,並且「數字」名的前面不要有空格或其它字元。同時,你的文件名對應文件也請保存為「source_name.txt」這個名稱和格式的文件。
「4」shell腳本文件「rename_by_source.sh」,內容如下:
#!/bin/bash
catsource_name.txt|whilereadLINE
do
ori_name=${LINE:0:7};
des_name=${LINE:8};
cp"${ori_name}.mp3""${des_name}.mp3";
done
解釋一下,第3句是逐行讀取source_name.txt的內容,並賦值給變數LINE,第5句是把該行的第1至第8個字元作為原始文件名,第6句是把該行的第9至末尾的字元串作為新文件名,第7句是在當前文件夾下「復制」(原始文件名.mp3)文件並重命名為(新文件名.mp3)文件。
之所以採用「復制」而不是「移動」命令,主要還是希望避免誤操作。
「5」在前面的文件夾中,新建並保存上述shell腳本文件,然後在終端terminal里賦予此shell腳本文件的可執行許可權,反正也沒有什麼關系,我是直接改為了777許可權:
sudochmod777rename_by_source.sh
「6」在終端中,在當前文件夾下運行上述shell腳本文件:
./rename_by_source.sh
完成。
下面是我這里的測試截圖,
如有幫助,煩請採納,謝謝!
Ⅷ linux下開發腳本搜索子目錄批量更改文件名
前言
本文主要給大家介紹了關於Linux shell用sed批量更改文件名的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
示例
去除特定字元
目標:將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg
方法:將所有 - 替換為空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed 's/-//g'`
mv $file $newfile
done
這里使用sed進行標准輸出的字元串替換,其通用格式如下:
stdout | sed 's/pattern/replace/'
上述示例中,在末尾添加g用於替換所有匹配項,而不僅僅替換第一個匹配項。
中間插入字元
目標:將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt
方法:用分組匹配分別獲取待插入位置兩側的字元串,再通過反向引用實現替換
for file in `ls | grep .txt`
do
newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
mv $file $newfile
done
分析
上述示例首先通過 ls 和 grep 命令得到待改名的文件列表,然後用 sed 命令進行字元串的替換,最後再使用 mv 命令來完成文件名的更改。
獲取待改名文件列表的方法有很多,可以通過 find 命令,也可以直接給出字元串,我們將在下文中提到。
注意 for 循環後面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字元串會被當作命令執行,然後返回字元串結果。
文件名包含空格的解決方法
我們可以直接將文件列表寫到 for 循環中,而不是通過命令來得到,例如:
for file in "file1 file2 file3"
do
...
done
可以看到 for 循環是通過空格來分割字元串,因此如果待更改的文件名中包含空格的話,就會被拆分成多個文件名,從而出錯。
要解決這個問題,我們可以將 IFS(內部欄位分隔符)設置為換行符 \n,這樣一來,for 循環就會按行來獲取變數的值,確保每次獲取的確實是一個完整的文件名。
設置 IFS 變數的命令需要放在 for 循環之前:
IFS=$'\n'
for file in `ls`
do
...
done
也可以直接使用 while read 命令一次讀取一行到變數 file 中:
ls | grep "*.txt" | while read file
do
...
done
使用 find 獲取文件列表
之前的示例中,我們是通過 ls 命令來獲取文件列表。該命令只能獲取某個目錄的文件,而且沒法進行多種條件的篩選。
而一說到文件的查找,不得不提到功能強大的 find 命令。該命令可以在多個層次的目錄中查找文件,並能夠設定諸如創建時間、文件大小、所有者等多種條件,查找起文件來特別方便靈活。
用 find 命令來獲取文件列表,再用 sed 命令配合正則表達式來修改文件名,這兩個命令的結合幾乎能完成所有常見的批量改名任務。
例如,將所有大於1M,且後綴為txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg,代碼如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
mv $file $newfile
done
Ⅸ linux shell 怎麼將一個目錄下面文件名字進行改名
#!/bin/bash
pth="/home/cnbubble/test/tt/"#建議寫局對路徑
forfin`ls$pth`
do
sed-i'1i#!/bin/sh'"$pth$f"#使用sed在第一行前加一行
sed-i'1attisqlxz_abmy<<!'"$pth$f"#在第一行後再加一行
mv"$pth$f""$pth${f}.sh"#移動專文件,相當屬於重命名
#chmod+x"$pth${f}.sh"#加其他操作,比如更改許可權
done
上的腳本會對要處理的文件夾中所有的文件進行操作,腳本放置此文件夾以外。不然要更改程序,避免操作自身