我正在写一个脚本,它正在新行中打印所有空格。这是一个Bash脚本

时间:2017-11-10 12:26:06

标签: bash sed

for f in $( tasks/1_uniq/ -type f -follow -print | sed -r 's/[[:blank:]]+/ /g' ); do
        md5sum $f
done

这就是打印它找到空间的地方。

tasks/1_uniq/two/6/66/test/me
&
my
friends

我无法妥善逃离这些空间。

2 个答案:

答案 0 :(得分:1)

这是由于单词拆分,扩展后没有引号,它被'$ IFS'(空格选项卡和换行符)中的字符拆分,通过双引号将整个扩展作为参数。看来你想按换行分开。它可以通过阅读轻松完成;

while read filepath; do
    md5sum "$filepath"  # note the double quotes to avoid word splitting
done < <( tasks/1_uniq/ -type f -follow -print | sed -r 's/[[:blank:]]+/ /g' )

我不明白修改文件名的sed命令,它会给出错误的文件名,另一个选项

find ... -exec md5sum {} +

其中...替换为选项

答案 1 :(得分:1)

从您的原始代码中,您的目标似乎是打印出目录下所有文件的md5校验和。在这种情况下,您只需使用rhash

即可
rhash -r -M dir/

-r表示递归,-M表示md5哈希值