这就是我的开始方式。很简单。
a="abc"
b="ABC"
if [ "$a" == "$b" ]; then
echo "Strings $a & $b match"
else
echo "Strings $a don't match $b"
fi
然后我尝试了这个。在该状态下,即使我尚未下载,它始终会显示跳过状态。
input="file"
while IFS= read -r line; do
path="${line%/*}"
file="${line##*/}"
if [ $line = $file ]; then
echo "skipping ${file##*/}"
else
wget -nc -q --show-progress "${path}/${file}"
sleep 1
fi
done < "$input"
我也尝试过这个。我知道这是错误的,因为我没有让y匹配x的条件。我试图使用y作为wget中的变量来匹配文件x中的某些内容。
for x in $(cat file); do
for y in ???; do
if [ "$x" == "$y" ]; then
echo "${x##*/} & ${y##*/} match skipping download"
else
echo "${x##*/} don't match ${y##*/} downloading"
sleep 1
wget -q -nc --show-progress "$y"
fi
done
done
我真的只是想运行一个基本循环,以便能够在下载时检查我的文件。如果文件已经存在,请跳过文件;否则请跳过文件。
答案 0 :(得分:0)
您不需要第二次循环
只需检查文件是否可读,否则就下载。
#!/bin/bash
CHECKFILE="$1"
while read line; do
if [ ! -r $line ]; then
echo "File: $line not found"
#change touch line to your wget
#wget ....
touch $line
else
echo "Found: $line"
fi
done < "$CHECKFILE"
记住Linux是区分大小写的。 当然,您可以在一行中包含多个数据并将其拆分以获取文件名和路径。
脚本的结果将是。
$>ls -1
a.txt
b.txt
d.txt
files.txt
test.sh
$>cat files.txt
a.txt
b.txt
c.txt
d.txt
e.txt
A.txt
a.txt
$>test.sh files.txt
Found: a.txt
Found: b.txt
File: c.txt not found
Found: d.txt
File: e.txt not found
File: A.txt not found
Found: a.txt
$>ls -1tr
d.txt
b.txt
a.txt
files.txt
test.sh
c.txt
e.txt
A.txt
$>