我有两个数组,一个有要搜索的文件路径,另一个有要分离的文件。例如 searchfile.dat会有 文件: abc303 XYZ123
我必须搜索可能是abc303 * .dat或任何扩展名的文件。 abc303 * .dat.gz
如果我给*,下面的代码不起作用,只有当我在searchfile.dat中给出要搜索的确切文件名时,它才有效,我也试过没有引号而没有反斜杠。
我正在使用ksh
while [[ $i -lt ${#filearray[@]} ]];do
while [[ $j -lt ${#filepath[@]} ]];do
found=0
if [[ -a "${filepath[$j]}/${filearray[$i]}"\* ]]; then
echo ${filepath[$j]}/${filearray[$i]} "found"
答案 0 :(得分:0)
这是代码
#!/usr/bin/ksh
set -A filearray $(cat searchfile.dat)
fp1=/home/n221/fp1
fp2=/home/n221/fp2
set -A filepath $fp1 $fp2 $fp3
i=0
j=0
while [[ $i -lt ${#filearray[@]} ]];do
while [[ $j -lt ${#filepath[@]} ]];do
found=0
echo ${filepath[$j]}/${filearray[$i]} "${filepath[$j]}/${filearray[$i]}"
if [[ -a "${filepath[$j]}/${filearray[$i]}"\* ]]; then
echo ${filepath[$j]}/${filearray[$i]} "found"
found=1
elif [[ $found -eq 0 ]]; then
echo ${filearray[$i]} "not found in " ${filepath[$j]}
fi
(( j=j+1 ))
done
found=5
j=0
(( i=i+1 ))
done
输出
${filepath[$j]}/${filearray[$i]} /home/n221/fp1/b.dat
b.dat not found in /home/n221/fp1
${filepath[$j]}/${filearray[$i]} /home/n221/fp2/b.dat
b.dat not found in /home/n221/fp2
我在/ home / n221 / fp1路径中放置了一个b.dat.gz文件 在searchfile.dat中,我放置了“d.dat”
答案 1 :(得分:0)
主要问题是测试if [[ -a "${filepath[$j]}/${filearray[$i]}"\* ]]
双方括号具有特殊含义,您的脚本可以更好地使用
if [ -a "${filepath[$j]}/${filearray[$i]}"\* ]
我对通配符不太满意,但是当你有多个文件时它仍然有用。
我会避免像这样的数组:
#!/usr/bin/ksh
fp1=/home/n221/fp1
fp2=/home/n221/fp2
filepath="$fp1 $fp2 $fp3"
i=0
j=0
cat searchfile.dat | while read file; do
for path in ${filepath}; do
found=0
echo Searching ${path}/${file}
if [ -a "${path}/${file}"* ]; then
echo ${file}/${file} "found"
found=1
elif [[ $found -eq 0 ]]; then
echo ${file} "not found in " ${path}
fi
(( j=j+1 ))
done
found=5
j=0
(( i=i+1 ))
done
也许你可以避免使用find的循环,从
开始filepath="$fp1 $fp2 $fp3"
filebases="-name b.dat* -o -name notfound.dat* -o -name otherfile.dat*"
find ${filepath} ${filebases}