Bash-使用find提取url
当我在提取(膨胀)XLSX的目录中运行以下命令时,我将获得在子文件夹文件中找到的所有URL 找到-exec exiftool{}\|grephttp 现在我想把它作为我开发的bash脚本的一部分来运行,但它在完成后并没有显示任何内容 以下是脚本中的代码:Bash-使用find提取url,bash,shell,Bash,Shell,当我在提取(膨胀)XLSX的目录中运行以下命令时,我将获得在子文件夹文件中找到的所有URL 找到-exec exiftool{}\|grephttp 现在我想把它作为我开发的bash脚本的一部分来运行,但它在完成后并没有显示任何内容 以下是脚本中的代码: if [[ $fileName == *.xlsx ]]; then #file is XML based, create new directory with file name, copy file there and extra
if [[ $fileName == *.xlsx ]]; then
#file is XML based, create new directory with file name, copy file there and extract
echo "Creating directory\n"
DATE=`date +%Y-%m-%d`
mkdir "Files/$DATE-$fileName-$USER"
cp $filePath "Files/$DATE-$fileName-$USER"
unzip "Files/$DATE-$fileName-$USER/$fileName" -d "Files/$DATE-$fileName-$USER/"
result="find 'Files/$DATE-$fileName-$USER/$fileName' -exec exiftool {} \; | grep http"
printf $result
fi
感谢您的支持,找出这里的问题所在 您不调用命令,而是分配
result="find 'Files/$DATE-$fileName-$USER/$fileName' -exec exiftool {} \; | grep http"
但该命令被视为字符串,从未执行过。单引号中的变量也不会展开。相反,写
result="$(find "Files/$DATE-$fileName-$USER/$fileName" -exec exiftool {} \; | grep http)"
其他改进
默认情况下,echo
无法识别\n
。将echo“Creating directory\n”
替换为echo“Creating directory”
,并为附加换行添加另一个空的echo
printf$result
可能会吞下%
转义序列和第一个空格后的部分。引用变量并使用%s
:printf%s“$result”
不要将目录及其内的文件传递到
exiftool
。使用exiftool
的递归选项并删除find
部分,或者将-type f
添加到find
命令中,这样只列出文件。如果不调用该命令,则会有赋值
result="find 'Files/$DATE-$fileName-$USER/$fileName' -exec exiftool {} \; | grep http"
但该命令被视为字符串,从未执行过。单引号中的变量也不会展开。相反,写
result="$(find "Files/$DATE-$fileName-$USER/$fileName" -exec exiftool {} \; | grep http)"
其他改进
默认情况下,echo
无法识别\n
。将echo“Creating directory\n”
替换为echo“Creating directory”
,并为附加换行添加另一个空的echo
printf$result
可能会吞下%
转义序列和第一个空格后的部分。引用变量并使用%s
:printf%s“$result”
不要将目录及其内的文件传递到
exiftool
。使用exiftool
的递归选项并删除find
部分,或者将-type f
添加到find
命令中,这样只列出文件。是我还是你根本不执行find命令?还有=*.xlsx
。。。这是真的吗?如果echo$filename | grep-E'*[.]xlsx$”,那么像这样的东西就不会更好了;然后
@MichaelSpeer执行此检查有多种方法,我的和你的只是其中的两种。尽管如此,如果在这个用例中的结果是相同的,那么这就成了一个优先考虑的问题。@MichaelSpeer,这个构造有在POSIX shell中工作的好处,但在bash中不必要地繁重。此外,注释中的正则表达式不正确,因为*
应该表示“前面原子的零个或多个”。@ghoti感谢您的更正。我在另一条评论的前面加了一个前缀,想知道这是否是一个真正的构造,而不是一个误解。我后来浏览了大量的bash手册页,找到了它。我以前对它不太熟悉,因此对它和显然不起作用的find语句一起提出了质疑。感谢你们两位在matteris it just me(仅限我)中对我进行的教育,还是您根本没有执行find命令?还有==*.xlsx
。。。这是真的吗?如果echo$filename | grep-E'*[.]xlsx$”,那么像这样的东西就不会更好了;然后
@MichaelSpeer执行此检查有多种方法,我的和你的只是其中的两种。尽管如此,如果在这个用例中的结果是相同的,那么这就成了一个优先考虑的问题。@MichaelSpeer,这个构造有在POSIX shell中工作的好处,但在bash中不必要地繁重。此外,注释中的正则表达式不正确,因为*
应该表示“前面原子的零个或多个”。@ghoti感谢您的更正。我在另一条评论的前面加了一个前缀,想知道这是否是一个真正的构造,而不是一个误解。我后来浏览了大量的bash手册页,找到了它。我以前对它不太熟悉,因此对它和显然不起作用的find语句一起提出了质疑。谢谢你们两位在matterOk中对我进行的教育…所以我用你们的bit替换了我,但我仍然看不到find命令的输出…@ksa\u coder您是否为$fileName
分配了任何值,该值是否以.xlsx
结尾?您能否确认文件/$DATE-$fileName-$USER/$fileName
中是否有任何文件,并且其中至少有一个元数据字段包含搜索字符串http
?好的……因此我用您的替换为bit,但仍然没有看到find命令的输出…@ksa_coder您是否为$fileName
分配了任何值,该值是否以.xlsx
结尾?您能否确认文件/$DATE-$fileName-$USER/$fileName
中有任何文件,并且其中至少有一个具有包含搜索字符串http
的元数据字段?