1. 程式人生 > >dos2unix命令將dos檔案轉換為unix格式

dos2unix命令將dos檔案轉換為unix格式

使用git 的時候碰到git將unix換行符轉換為windows換行符的問題,需要使用dos2unix命令將檔案轉換為unix格式。

dos2unix命令用來將DOS格式的文字檔案轉換成UNIX格式的(DOS/MAC to UNIX text file format converter)。DOS下的文字檔案是以\r\n作為斷行標誌的,表示成十六進位制就是0D 0A。而Unix下的文字檔案是以\n作為斷行標誌的,表示成十六進位制就是0A。DOS格式的文字檔案在Linux底下,用較低版本的vi開啟時行尾會顯示^M,而且很多命令都無法很好的處理這種格式的檔案,如果是個shell指令碼,。而Unix格式的文字檔案在Windows下用Notepad開啟時會拼在一起顯示。因此產生了兩種格式檔案相互轉換的需求,對應的將UNIX格式文字檔案轉成成DOS格式的是unix2dos命令。

語法:

dos2unix [-hkqV] [-c convmode] [-o file ...] [-n infile outfile ...]

選項


 1. -k:保持輸出檔案的日期不變 
 2. -q:安靜模式,不提示任何警告資訊
 3. -V:檢視版本
 4. -c:轉換模式,模式有:ASCII, 7bit, ISO, Mac, 預設是:ASCII
 5. -o:寫入到原始檔
 6. -n:寫入到新檔案

引數

引數:需要轉換到的檔案。

例項
最簡單的用法就是dos2unix直接跟上檔名:

dos2unix file 

如果一次轉換多個檔案,把這些檔名直接跟在dos2unix之後。(注:也可以加上-o引數,也可以不加,效果一樣)

dos2unix file1 file2 file3 
dos2unix -o file1 file2 file3 

上面在轉換時,都會直接在原來的檔案上修改,如果想把轉換的結果儲存在別的檔案,而原始檔不變,則可以使用-n引數。

dos2unix oldfile newfile 

如果要保持檔案時間戳不變,加上-k引數。所以上面幾條命令都是可以加上-k引數來保持檔案時間戳的。

dos2unix -k file
dos2unix -k file1 file2 file3
dos2unix -k -o file1 file2 file3
dos2unix -k -n oldfile newfile

以上是轉換單個檔案,如果要轉換目錄或資料夾的話,請往下看:

Linux本身提供了dos2unix和unix2dos這兩個命令來實現windows和linux檔案的轉換,

但是。dos2unix和unix2dos本身沒有提供遞迴也就是批量修改的方式,這樣一來我們就需要藉助於xargs命令了

xargs的命令的作用就是將引數列表轉換成小塊分段傳遞給其他命令,藉助於xargs,我們可以很簡單的實現批量替換;

這裡假設我需要替換的檔案所在目錄為 public/components目錄下。

如果批量替換public/components 目錄下的所有檔案使用如下命令:

find public/components/ -name "*" | xargs dos2unix

其中,”*”號表示所有檔案。

要更改檔案格式的字尾為.py ,那麼藉助於下面的命令就可以輕鬆的實現批量替換格式:
批量替換為linux檔案格式:

sudo find public/components/ -name "*.py" | xargs dos2unix

批量替換為dos檔案格式:

sudo find public/components/ -name "*.py" | xargs unix2dos

優點:批量替換,工作量小, 總的來說,方法二藉助於 管道符和xargs來實現的批量命令,將方法二修改一下就可以實現很多的批量操作,

比如:

1.批量刪除整個linux系統中字尾為.tmp的檔案;那麼命令可以這麼寫:

sudo find /home/test -name "*.tmp" | xargs rm -f

2.刪除整個linux系統中與apache相關的檔案:

sudo find /home/test -name "*apache" | xargs rm -rf