从文档中读取多行路径并执行操作
Reading muilti line path from document and performing actions
我有一个脚本,我正试图 运行 在主文档上。该脚本查看一个 txt 文档,其中包含用双引号引起来的完整文件名和路径。然后它获取文件名和父文件夹(因为完整的文件夹结构不匹配)并搜索主文档。然后它将结果输出到另一个文本文档这是我到目前为止所拥有的,如果我将引用的文件直接放入字符串中它会起作用但是当我试图让它从包含引用文件的文件中读取时它会中断
要读取的示例源文本文件:
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
#!/bin/bash
AWS="/home/user/Documents/awslist.csv" #variable for master document
LSFLDR=$(while read k; do echo "$k"; #variable to read source text file
done < /home/user/Documents/FP.txt)
strings=(
$LSFLDR
)
for i in "${strings[@]}";
do (
VAR="$i" #variable for line in source text file
DIR="$(basename "$(dirname "$VAR")")" #variable to locate parent folder
FIL=$(basename "${VAR}") #variable to locate file name
CMP="${DIR}"\/"${FIL}" #variable to search master document
if grep -q "$CMP" $AWS; #searching master document for parent folder and file name
then
echo $i found >> /home/user/Documents/Scanresults.txt
else
echo $i not found >> /home/user/Documents/Scanresults.txt
fi
)
done
您可能想阅读 How can I read a file (data stream, variable) line-by-line (and/or field-by-field)? -- 您填充 strings
数组的方式令人恐惧。
如果您想用文件的行填充数组:
mapfile -t strings < filename
如果您只想迭代文件的行(不必将整个文件读入内存):
while IFS= read -r line; do
do_something_with "$line"
done < filename
谢谢格伦!是的,我敢肯定我的剧本让你畏缩了,哈哈。映射文件正是我需要让它工作的!
我有一个脚本,我正试图 运行 在主文档上。该脚本查看一个 txt 文档,其中包含用双引号引起来的完整文件名和路径。然后它获取文件名和父文件夹(因为完整的文件夹结构不匹配)并搜索主文档。然后它将结果输出到另一个文本文档这是我到目前为止所拥有的,如果我将引用的文件直接放入字符串中它会起作用但是当我试图让它从包含引用文件的文件中读取时它会中断
要读取的示例源文本文件:
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
"This-is/An-Example-pFa/ati4_review_2014033434314-15532223545/article19_20140314-155812_REVIEW.JPG"
#!/bin/bash
AWS="/home/user/Documents/awslist.csv" #variable for master document
LSFLDR=$(while read k; do echo "$k"; #variable to read source text file
done < /home/user/Documents/FP.txt)
strings=(
$LSFLDR
)
for i in "${strings[@]}";
do (
VAR="$i" #variable for line in source text file
DIR="$(basename "$(dirname "$VAR")")" #variable to locate parent folder
FIL=$(basename "${VAR}") #variable to locate file name
CMP="${DIR}"\/"${FIL}" #variable to search master document
if grep -q "$CMP" $AWS; #searching master document for parent folder and file name
then
echo $i found >> /home/user/Documents/Scanresults.txt
else
echo $i not found >> /home/user/Documents/Scanresults.txt
fi
)
done
您可能想阅读 How can I read a file (data stream, variable) line-by-line (and/or field-by-field)? -- 您填充 strings
数组的方式令人恐惧。
如果您想用文件的行填充数组:
mapfile -t strings < filename
如果您只想迭代文件的行(不必将整个文件读入内存):
while IFS= read -r line; do
do_something_with "$line"
done < filename
谢谢格伦!是的,我敢肯定我的剧本让你畏缩了,哈哈。映射文件正是我需要让它工作的!