假若目前有一个windows下拷贝过来的文件 favorite_songs(喜欢的歌曲单,内部是 CRLF 结尾的),现在还有一个文件 music_list(内部包含所有歌曲的路径,非 CRLF 结尾),现在想将所有的 favorite songs 拷贝到一个单独的 favorite_dir 目录。可以使用下面的命令来完成:$cat favorite_songs | xargs -i grep {} music_list | xargs -i cp {} favorite_dir,但是运行时不会得到你所期望的结果,仔细调试便会发现 CRLF 在搞鬼,将其转换成 unix 下的 LF 结尾即可,转换的方法可以使用如下三种中的一种:
1. 使用命令dos2unix和unix2dos
2. 用vim打开输入命令::% s/\r//g
3. tr -d ‘\r‘ < dos-file.txt > UNIX-file.txt
此需求另外需要注意的问题是,windows下的文件名好多都包含空格的,可以使用 tr 命令将其转换为下划线以方便处理;另一个问题是 xargs 处理包含引号的文件名时也会出现问题,可以加 -0 参数,或者使用 $cat file | while read 的方式,或者彻底一点使用 tr 将文件改名。
原文:http://www.cnblogs.com/lian4187/p/3800046.html