我制作了一个脚本,该脚本列出了当前目录和子目录中的每个文件,并向我提供了该文件的开头和结尾(带有偏移量)的md5sum,并将其保存为.txt文件。
我使用管道进行了此操作,因此我无法重定向之前由userinput声明的变量。所以我将脚本更改为for循环。 现在出现问题:它不会列出所有文件,而只会列出一个。它似乎是随机执行的。为什么不像以前一样列出所有文件?
我什至尝试了**。*和./*等。我使用的是macbookpro mac os 10.13.6。我曾经安装过一些东西,所以我也可以使用linux命令,例如tree等。
感谢您的帮助!我不知道我能做什么。
#!/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
答案 0 :(得分:0)
您将在循环的每次迭代中覆盖文件。改用追加模式:
echo "$varname; $i ; $h ; $t" >> /Users/Tobias/Desktop/"$varname".txt
# ~~
或重定向整个循环的输出:
echo "$varname; $i ; $h ; $t"
done > /Users/Tobias/Desktop/"$varname".txt
答案 1 :(得分:0)
重定向整个循环的输出,而不是重定向每次都会覆盖文件的每个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