-exec 到 xargs 在 find 命令中的转换

Ash*_*ish 2 linux find xargs

我在脚本中使用以下命令对我dos2unix从 Windows 复制到 Linux 的文件执行操作。有很多文件,因此执行此操作需要相当长的时间。

我在互联网上搜索了优化这个发现,发现我们可以使用xargswithfind而不是-exec提高性能,但我正在努力将下面的转换为使用 with xargs

find /path_to_files/ -exec bash -c 'dos2unix -k -n "{}" tmp_file && mv tmp_file "{}"' \;
Run Code Online (Sandbox Code Playgroud)

Qua*_*odo 8

它实际上要简单得多。您不需要调用 shell 或使用,mv因为dos2unix如果您不给它这个-n标志,它已经修改了目标文件。

find /path_to_files -type f -exec dos2unix -k -q -- {} +
Run Code Online (Sandbox Code Playgroud)

-type f这样 find 只搜索常规文件,而不是目录。-q标志被赋予,dos2unix以便它不会将信息性消息写入标准输出。并且我们使用{} +而不是{} \;这样 find 不会dos2unix为找到的每个文件调用一个进程,而是提供尽可能多的文件作为参数 ( dos2unix file1 file2 file3 ...)。

Xargs 只是一个额外的过程,因此是一个额外的时间惩罚。尽可能避免调用新进程。