我在脚本中使用以下命令对我dos2unix
从 Windows 复制到 Linux 的文件执行操作。有很多文件,因此执行此操作需要相当长的时间。
我在互联网上搜索了优化这个发现,发现我们可以使用xargs
withfind
而不是-exec
提高性能,但我正在努力将下面的转换为使用 with xargs
:
find /path_to_files/ -exec bash -c 'dos2unix -k -n "{}" tmp_file && mv tmp_file "{}"' \;
Run Code Online (Sandbox Code Playgroud)
它实际上要简单得多。您不需要调用 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 只是一个额外的过程,因此是一个额外的时间惩罚。尽可能避免调用新进程。