Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-使用find提取url_Bash_Shell - Fatal编程技术网

Bash-使用find提取url

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

当我在提取(膨胀)XLSX的目录中运行以下命令时,我将获得在子文件夹文件中找到的所有URL

找到-exec exiftool{}\|grephttp

现在我想把它作为我开发的bash脚本的一部分来运行,但它在完成后并没有显示任何内容

以下是脚本中的代码:

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
的元数据字段?