Linux xargs命令解析及递归执行dos2unix命令
我们在把windows的文件拷贝到linux系统下是,有时候会出现无法使用的情况,这可能就是文件格式被修改了,那么我们就需要转成linux格式才能用,这里介绍一个工具 dos2unix
,可以通过指令批量改写文件格式,下面的介绍这条指令的作用:
不想看的同学,可以直接使用最底部的命令
一、xargs命令的作用
xargs
命令的作用,是将标准输入转为命令行参数。
echo "hello world" | xargs echo
hello world
上面的代码将管道左侧的标准输入,转为命令行参数 hello world
,传给第二个 echo
命令。
xargs
命令的格式如下。
xargs [-options] [command]
真正执行的命令,紧跟在 xargs
后面,接受xargs传来的参数。
xargs
的作用在于,大多数命令(比如rm、mkdir、ls)与管道一起使用时,都需要xargs将标准输入转为命令行参数。
echo "one two three" | xargs mkdir
上面的代码等同于 mkdir one two three
。如果不加xargs就会报错,提示mkdir缺少操作参数。
二、-0 参数与 find 命令
由于 xargs
默认将空格作为分隔符,所以不太适合处理文件名,因为文件名可能包含空格。
find
命令有一个特别的参数 -print0
,指定输出的文件列表以 null
分隔。然后,xargs
命令的 -0
参数表示用 null
当作分隔符。
find /path -type f -print0 | xargs -0 rm
上面命令删除/path路径下的所有文件。由于分隔符是 null
,所以处理包含空格的文件名,也不会报错。
还有一个原因,使得 xargs
特别适合 find
命令。有些命令(比如rm)一旦参数过多会报错"参数列表过长",而无法执行,改用xargs就没有这个问题,因为它对每个参数执行一次命令。
find . -name "*.txt" | xargs grep "abc"
上面命令找出所有TXT文件以后,对每个文件搜索一次是否包含字符串abc。
三、递归执行dos2unix命令
安装使用
sudo apt install dos2unix
查找出所有文件,并使用 null
分隔文件名,同时对每个文件都执行 dos2unix
命令
$ find . -type f -print0 | xargs -0 dos2unix