【问题标题】:find command in for loop does not list all the filesfor循环中的find命令没有列出所有文件
【发布时间】:2018-07-18 22:14:17
【问题描述】:

我制作了一个脚本,它列出了当前目录和子目录中的每个文件,并从该文件的头部和尾部(带有偏移量)给我 md5sum 并将其保存到 .txt 文件中。

我是用管道做的,所以我不能重定向一个变量,这个变量之前已经由用户输入声明过。所以我将脚本更改为 for 循环。 现在的问题:它没有列出所有文件,而只列出一个。它似乎是随机的。为什么它不像以前那样列出所有文件?

我什至尝试过 **.* 和 ./* 等等。我使用的是 macbookpro mac os 10.13.6。我曾经安装过一些东西,所以我也可以使用 linux 命令,例如树等...

感谢任何帮助!我不知道我还能做什么。

未重定向变量的旧代码:

#!/bin/bash

echo Wie heißt die Festplatte?
read varname
echo Los gehts! 

before=$(date +%s)

find . \( ! -regex '.*/\..*' \) -type f -exec bash -c 'h=`tail -n +50000 "{}" | head -c 1000 | md5`;\
             t=`tail -c 51000 "{}" | head -c 1000 | md5`;\
             echo "$varname {} ; $h ; $t"' \;> /Users/Tobias/Desktop/$varname.txt

after=$(date +%s)

echo Das hat: $(((after - $before)/60)) Minuten bzw $(((after - $before))) Sekunden gedauert

新代码,它没有列出所有文件,只列出一个:

#!/bin/bash

echo Wie heißt die Festplatte?
read varname
echo Los gehts! 

before=$(date +%s)

for i in $( find . \( ! -regex '.*/\..*' \) -type f ); do
h=$(tail -n +50000 $i | head -c 1000 | md5)
t=$(tail -c 51000 $i | head -c 1000 | md5)
echo "$varname; $i ; $h ; $t" > /Users/Tobias/Desktop/$varname.txt
done 

after=$(date +%s)

echo Das hat: $(((after - $before)/60)) Minuten bzw $(((after - $before))) Sekunden gedauert

【问题讨论】:

    标签: bash macos variables for-loop find


    【解决方案1】:

    您在循环的每次迭代中都覆盖了文件。改用追加模式:

    echo "$varname; $i ; $h ; $t" >> /Users/Tobias/Desktop/"$varname".txt
    #                             ~~
    

    或者重定向整个循环的输出:

        echo "$varname; $i ; $h ; $t"
    done  > /Users/Tobias/Desktop/"$varname".txt
    

    【讨论】:

    • 不幸的是,这两种变体都给出了空的 txt 文件,但将循环的输出打印到了 shell 中。
    • 那你的shell严重坏了。
    【解决方案2】:

    重定向整个循环的输出,而不是每个echo 语句,它每次都会覆盖文件。

    for i in $( find . \( ! -regex '.*/\..*' \) -type f ); do
        h=$(tail -n +50000 $i | head -c 1000 | md5)
        t=$(tail -c 51000 $i | head -c 1000 | md5)
        echo "$varname; $i ; $h ; $t"
    done > /Users/Tobias/Desktop/$varname.txt
    

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      相关资源
      最近更新 更多