2013-02-21 87 views
2

我知道如何通過使用dos2unix將文件格式從dos更改爲unix,但是如何將所有文件更改爲目錄樹下。 dos2unix可以遞歸地更改文件嗎?如何將某些文件從dos格式轉換爲unix

例如,我有一個像下面的一些文件:

TOPDIR 
| 
+-----dir1 
|  | 
|  +---file1,file2, file3 
| 
+-----dir2 
     | 
     +---file4,file5 

我怎樣才能改變他們在同一時間,或使用一些shell腳本?

+3

你應該開始玩弄UNIX命令。沒有其他方法可以學習如何使用他們提供的力量。你必須嘗試自己,逐步探索和征服那個環境。這樣做,這是值得的。 – arkascha 2013-02-21 06:32:38

+0

@arkascha,謝謝你的建議 – 2013-02-21 06:56:19

+0

對此,閱讀manpage或'$ CMD --help'總是有幫助的,因爲一些程序(例如'grep')有一個遞歸標誌'-R'來爲你做這件事。另外,如果文件數量不是太高(即幾百個),你可以使用像'zsh'這樣的shell的擴展glob功能來執行'dos2unix **/*'。 – filmor 2013-02-21 08:12:03

回答

5

最好是用來做find /path -type -f -exec dos2unix '{}' \;

+0

+1。我從* .c模式的示例中複製粘貼,但對於所有文件,-type f更好。 :-) – 2013-02-21 06:51:05

+0

@Andrey Dmitriev,'find/path -type -f -exec dos2unix'{}'和'find/path -type f -exec dos2unix {} +' – 2013-02-21 07:00:59

+0

語法產生的作業更少;用分號表示它是每個文件的一個新進程。 – tripleee 2013-02-21 07:03:42

1

find /path -name '*' -type f -exec dos2unix {} \;

+1

爲什麼要添加'-name'*''? – filmor 2013-02-21 06:45:34

+0

如果你只需要將'dos2unix'應用於某些文件,讓示例更易於理解,imo(例如,你可以編寫'-name'* .c'') – Unknown 2013-02-21 07:21:39

+0

......也許這個答案背後的思想是'-name'*''會排除點文件('。*')?那麼,無論如何,它不會(在某些情況下它已經習慣了,但現在它不會 - 所以不要假設它會)。例如,'.foo'文件或'.git'目錄中的文件將被處理。這些文件必須被排除,例如'find path \(-name「。*」-prune \)-o \(-type f -print \)'(注意:你不能用find來啓動它。 (等)'否則它會排除一切) – michael 2013-02-21 07:22:51

0
dos2unix -k `find . -type f` 
find . -type f -exec dos2unix -k '{}' \; 
find . -type f -print | xargs dos2unix -k 

上述任何命令都可以從TOPDIR

相關問題