将标准输入作为参数传递给 sed
Pass stdin as argument in sed
如果我们必须查找文件、计算 md5 代码然后将其放入文本文件,我必须编写一个命令。查找文件并不难,只是
find -type f
现在我有一个文件列表,我必须为每个文件找到 md5 代码。我知道生成 md5 代码的代码
openssl dgst -md5 <file>
但是我如何使用管道(无脚本)来实现类似这样的东西`
filename md5code
我已经试过了
while read line do... done
但这没有用。我以为我必须使用 sed,但我现在真的不知道该怎么做。我最接近的尝试(我认为)是这样的:
find dir -type f | sed "s/^\(.*\)$/ $( openssl dgst -md5 )/" >> file.txt
但它无法识别 \1...
我在 find 中使用 -exec 选项尝试过,如下所示:
md5$ find dir -type f -exec sed "s/^\(.*\)$/ $( openssl dgst -md5 {} )/" \;
但它无法识别{}
您的命令替换在单引号内不起作用,而且,我建议使用 -exec
开关而不是管道。您也可以使用 -print
(或 -printf
,如果您的 find 版本支持它),尽管文件名无论如何都包含在我系统上 openssl 命令的输出中,所以您可能不需要它。试试这个:
find . -type f -printf '%f ' -exec openssl dgst -md5 {} \;
您可以使用xargs
命令来处理find
命令返回的文件列表。
find dir -type f | xargs md5sum >> file.txt
大多数 Unix-like 操作系统应该安装 md5sum
实用程序,所以我使用它而不是 openssl dgst -md
。
xargs
命令将文件列表作为输入,然后通过将这些文件用作 md5sum
命令的参数来构建命令。
如果您的文件名包含空格或其他不常见的字符,您需要使用:
find dir -type f -print0 | xargs -0 md5sum >> file.txt
-print0
选项使用 NULL 字符分隔 find
命令返回的文件列表,xargs
的 -0, --null
选项告诉它使用NULL 而不是空格来分隔输入项。
注意:这将适用于这些工具的 GNU 版本。我不知道其他版本,因为它没有被 POSIX specification for find.
采用
如果我们必须查找文件、计算 md5 代码然后将其放入文本文件,我必须编写一个命令。查找文件并不难,只是
find -type f
现在我有一个文件列表,我必须为每个文件找到 md5 代码。我知道生成 md5 代码的代码
openssl dgst -md5 <file>
但是我如何使用管道(无脚本)来实现类似这样的东西`
filename md5code
我已经试过了
while read line do... done
但这没有用。我以为我必须使用 sed,但我现在真的不知道该怎么做。我最接近的尝试(我认为)是这样的:
find dir -type f | sed "s/^\(.*\)$/ $( openssl dgst -md5 )/" >> file.txt
但它无法识别 \1...
我在 find 中使用 -exec 选项尝试过,如下所示:
md5$ find dir -type f -exec sed "s/^\(.*\)$/ $( openssl dgst -md5 {} )/" \;
但它无法识别{}
您的命令替换在单引号内不起作用,而且,我建议使用 -exec
开关而不是管道。您也可以使用 -print
(或 -printf
,如果您的 find 版本支持它),尽管文件名无论如何都包含在我系统上 openssl 命令的输出中,所以您可能不需要它。试试这个:
find . -type f -printf '%f ' -exec openssl dgst -md5 {} \;
您可以使用xargs
命令来处理find
命令返回的文件列表。
find dir -type f | xargs md5sum >> file.txt
大多数 Unix-like 操作系统应该安装 md5sum
实用程序,所以我使用它而不是 openssl dgst -md
。
xargs
命令将文件列表作为输入,然后通过将这些文件用作 md5sum
命令的参数来构建命令。
如果您的文件名包含空格或其他不常见的字符,您需要使用:
find dir -type f -print0 | xargs -0 md5sum >> file.txt
-print0
选项使用 NULL 字符分隔 find
命令返回的文件列表,xargs
的 -0, --null
选项告诉它使用NULL 而不是空格来分隔输入项。
注意:这将适用于这些工具的 GNU 版本。我不知道其他版本,因为它没有被 POSIX specification for find.
采用