2013-02-21 72 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

相关问题