Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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';如果echo grep';_Bash_Shell - Fatal编程技术网

变量来自bash';如果echo grep';

变量来自bash';如果echo grep';,bash,shell,Bash,Shell,我使用下面的代码将我的CCTV录制和捕获的内容分类到超过一天的过时子目录中 有没有办法将IFcode的echo grep date部分的结果作为变量引用,以便在创建文件夹时使用 我可以使用另一个grep(或者定义变量并在IF语句中引用它)在单独的一行上创建一个变量,但是如果它都在一行上,我更愿意这样做 文件名类似于“MDAlarm_20160417-120925.jpg”,因此变量的内容将为2016-04-17 for f in ~/FI9803P_00626E5755DE/**/*; do

我使用下面的代码将我的CCTV录制和捕获的内容分类到超过一天的过时子目录中

有没有办法将
IF
code的
echo grep date
部分的结果作为变量引用,以便在创建文件夹时使用

我可以使用另一个
grep
(或者定义变量并在
IF
语句中引用它)在单独的一行上创建一个变量,但是如果它都在一行上,我更愿意这样做

文件名类似于“MDAlarm_20160417-120925.jpg”,因此变量的内容将为2016-04-17

for f in ~/FI9803P_00626E5755DE/**/*;
do
    if [[ `echo $f | grep -oP '\d{8}' | date -f - +'%Y-%m-%d'` != `date +'%Y-%m-%d'` ]]; then
        mkdir -p $(dirname $f)/$varFromIF; echo "Made it" #mv $f $(dirname $f)/$varFromIF
    fi
done

对。您可以这样做:

for f in ~/FI9803P_00626E5755DE/**/*;
do
    if [[ "${varFromIF=$(echo $f | grep -oP '\d{8}' | date -f - +'%Y-%m-%d')}" != $(date +'%Y-%m-%d') ]]; then
        mkdir -p $(dirname $f)/$varFromIF; echo "Made it" #mv $f $(dirname $f)/$varFromIF
    fi
done

您可能需要考虑使用<代码>查找< /代码>选项>代码> -Mtime/Coo>找到比一天更大的文件。这比在每个文件上使用
date
要快得多:
find~/FI9803P_00626E5755DE/-type f-ctime+1;同时读取f;做mkdir…;完成
。使用两行代码并使用描述性变量名(而不是一行)通常会使下一个开发人员更易于阅读代码,因此必须维护代码。这一点很好。这只是为了家,如果是为了工作的话,我肯定会让它更容易解释。啊,谢谢,我想它会是这样的,虽然它现在对我不起作用。我是否应该使用一些类似于我原来的IF?奇怪。它对我来说非常简单,比如:
if[[${varFromIF=$(日期+%Y-%m-%d')}==
date+%Y-%m-%d'`]`您可以尝试使用倒勾检查它是否有效。您也可以打印变量以进行调试。好的,varFromIF变量似乎只设置了一次,然后保持不变。如果它得到的第一个日期是2016-04-17,那么即使文件名更改,变量也将保持不变。同样,如果我在搜索路径中创建了一个目录,并且该目录首先被处理(没有grep匹配),那么varFromIF在脚本期间将为空。这可能是我在这方面做得不正确。您应该使用
$(…)
而不是反勾号。这是更现代,你可以很容易地嵌套它。对于反勾号,您必须引用嵌套的反勾号。此外,您还可以更好地谈论
$(…)
,正如上面显示的@AvihooMamka comment;-)