由於shell下預設分割符為空格,所以我們在執行一些檔名中還有空格的迴圈時,將會出現一些問題,
我們來看乙個目錄的檔案
[rubbish]$tree
.├── abc
└── bc de
0 directories, 2 files
這是乙個有2個檔案abc 和bc de組成的檔案,如果我們要執行乙個for迴圈
for loop in `ls`
do
echo $loop
done
結果大家應該都知道,輸出
abc
bcde
如果我們想批量除去檔名中的空格,我們應該怎麼做呢,下面我們看一下下面一段指令碼
for loop in `ls -1 | tr ' ' '#'`
do
mv "`echo $loop | sed 's/#/ /g' `" "`echo $loop |sed 's/#//g' `" 2> /dev/null
done
我們首先利用ls -1(不是字母l,是數字1),將單個檔案放在一行,然後利用替換,就檔名中的空格替換為#(具體自己看情況),下面就是利用一些替換將檔名給替換回來,不過需要記住,含有空格的檔名需要使用引號括起來,最終就可以替換當前目錄下的所有檔名中的空格,**中的2> /dev/null只是為了將不含空格的檔案替換中產生的原始檔已存在的資訊隱藏。
下面網友說的很對,使用rename一步搞定。
rename 's/ /_/g' *
上述命令可以將當前資料夾內所有檔案的名字中得所有空格替換為_。其中g代表所有,如果不加g,如果檔案名字中有多個空格,僅替換第乙個。
小胖軒.
shell指令碼 批量修改檔名 檔名中新增字元
舉例如下 批量建立10個隨機字串的檔案,要求每個檔名後面新增 aaa,字尾名不變 root localhost goodboy ls adddbbdedf.html baacjaiija.html bhcfaabcfh.html dgjdcdfbca.html efejadfdji.html agd...
shell指令碼 批量修改檔名 刪除檔名中字元
舉例如下 批量改名,刪除檔名中多餘字元 目錄下檔名為如下,要求去掉 finished。可以實現的方法有很多種 方法一 for迴圈結合sed替換 baby localhost for file in ls jpg do mv file echo file sed s finished g done 方...
shell 批量修改檔名
當前目錄有n多個 檔案,需要按從小到大排序,然後改名成 1.n.解法如下 整理來自於論壇 方法一 root squid mkdir ls lrs total 24 rw r r 1 root root 7 jun 1 01 19 test1.txt rw r r 1 root root 8 jun ...