Som*_*DOS 10 find io-redirection xargs
假设我在/tmp/
.
我愿意
find . -type f | xargs -iFILES
Run Code Online (Sandbox Code Playgroud)
我想md5sum
在每个文件中做一个,输出到一个同名但带有.md5
扩展名的文件。
find . -type f | xargs -iFILES md5sum FILES > FILES.md5
Run Code Online (Sandbox Code Playgroud)
这应该为 find 命令找到的每个文件创建一个 md5 文件。相反,它会在磁盘上创建一个 FILES.md5 文件,其中包含所有文件的校验和。
我如何对 md5sum 命令说 FILES 表示当前文件名而不是 FILES 文字字符串?
您需要使用子外壳来处理 IO 重定向:
find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'
Run Code Online (Sandbox Code Playgroud)
使用 GNU Parallel,您可以:
find . -type f | parallel md5sum {} \> {}.md5
Run Code Online (Sandbox Code Playgroud)
您可以获得并行运行 md5sum 的额外好处,这些文件如下:
My brother's 12" records.txt
Run Code Online (Sandbox Code Playgroud)
不会导致您的命令崩溃。观看介绍视频以了解更多信息:http : //www.youtube.com/watch?v=OpaiGYxkSuQ
您需要某种方式来表示要将输出发送md5sum
到文件。由于find
(或xargs
) 没有内置此功能,并且md5sum
只知道如何打印到标准输出,因此 shell 重定向是最直接的方法。
请注意,由于另一个原因,您的命令在一般情况下不起作用: 的输出格式find
不是 的输入格式xargs
,它们与包含空格或 的文件名不同\"'
。find -exec
代替使用。
find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;
Run Code Online (Sandbox Code Playgroud)