将xargs参数作为字符串传递给带有'>'的另一个命令?


9

假设我在中有一堆文件/tmp/

我做

find . -type f | xargs -iFILES

我想md5sum在每个文件中做一个,输出到一个具有相同名称但带有.md5扩展名的文件。

find . -type f | xargs -iFILES md5sum FILES > FILES.md5

应该为find命令找到的每个文件创建一个md5文件。相反,它将在磁盘上创建单个FILES.md5文件,其中包含所有文件的校验和。

我如何对md5sum命令说FILES代表当前文件名而不是FILES文字字符串?

Answers:


4

您需要某种方式说您要将输出发送md5sum到文件。由于find(或xargs)没有内置此功能,而md5sum只知道如何打印到标准输出,因此Shell重定向是最直接的方法。

请注意,您的命令在一般情况下由于其他原因将无法使用:的输出格式find不是的输入格式xargs,它们的区别在于文件名包含空格或\"'。使用find -exec代替。

find . -type f -exec sh -c 'md5sum "$0" >"$0.md5"' {} \;

7

您需要使用子外壳来处理IO重定向:

find . -type f | xargs -iFILES sh -c 'md5sum FILES > FILES.md5'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.