Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/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脚本用于字符串concat两个变量并进行文件比较_Bash_Variables_Unix_String Comparison_String Concatenation - Fatal编程技术网

Bash脚本用于字符串concat两个变量并进行文件比较

Bash脚本用于字符串concat两个变量并进行文件比较,bash,variables,unix,string-comparison,string-concatenation,Bash,Variables,Unix,String Comparison,String Concatenation,我试图实现的是删除Src_Dir1和Src_Dir2中存在的相同文件名(filename+modfiedtimestamp) 首先,我尝试将所有文件名分别部署到tempa(Src_Dir1)和tempb(Src_Dir2) 下面是源目录的屏幕截图 归档文件内部的文件可能是这样的,外部的文件也很少 所以,最初我想处理归档文件(SRC_Dir1)内的文件,然后处理归档文件(SRC_Dir2)外的文件。我尝试使用while循环读取每个文件名和字符串concat,并使用修改后的时间戳(mtime)将

我试图实现的是删除Src_Dir1和Src_Dir2中存在的相同文件名(filename+modfiedtimestamp)

首先,我尝试将所有文件名分别部署到tempa(Src_Dir1)和tempb(Src_Dir2)

下面是源目录的屏幕截图

归档文件内部的文件可能是这样的,外部的文件也很少

所以,最初我想处理归档文件(SRC_Dir1)内的文件,然后处理归档文件(SRC_Dir2)外的文件。我尝试使用while循环读取每个文件名和字符串concat,并使用修改后的时间戳(mtime)将其输入tempc(例如,它应该像AirTimeActs_2018-12-03.csv+2019-01-24 14:41:53.000000000-0500=AirTimeActs_2018-12-03.csv_2019-01-24 14:41:53.000000000-0500这就是它应该如何为存档中的每个文件名生成tempc文件的方式(SRC_Dir1)。这就是我被困在字符串concat变量部分如何继续的地方。请帮助我编写代码,希望我能理解

重要

(非常感谢,如果您能帮助我扩展我在这里没有提到但尚未实现的代码-> 必须实现相同的代码(我正在尝试为tempa执行此操作,我也希望为tempb执行此操作,并将其命名为tempd),然后在tempc和tempd之间执行文件数据比较)如果存在任何类型的相同数据文件名,则删除Src_Dir2中存在的文件,如果没有相同的数据文件名,则不执行任何操作。)


请尝试验证您的脚本。我不完全理解您想要实现的目标。请回答您的问题并添加一个示例:哪些文件在两个目录中?哪些文件要删除,哪些文件应该保留?请将其描述为文本,而不是(仅限)作为屏幕截图。请解释当您使用示例数据运行脚本时,您希望在
temp_a
等中获得什么。@Bodo-我已经以更详细的方式解释了,请检查它now@Jetchisel-我已经在shellcheck.net中进行了更改,没有错误,但代码似乎仍然不起作用,位于$Full_name>>chec这里介绍如何比较您的文件
 #!/bin/bash
    Src_Dir1=path/Airtime_Activation/Archive
    Src_Dir2=path/Airtime_Activation/

    find "$Src_Dir1" -maxdepth 1 -name "*.xlsx" -o -name "*.csv" | sed "s/.*\///" > -print>path/Airtime_Activation/temp_a
    find "$Src_Dir2" -maxdepth 1 -name "*.xlsx" -o -name "*.csv" | sed "s/.*\///" > -print>path/Airtime_Activation/temp_b

    echo 'phase1'
    cat path/Airtime_Activation/temp_a | while read file; 
    do
        echo 'phase1.5'
        echo "$file"
        echo 'phase2'
        mtime=$(stat -c '%y' $file)
        Full_name=${file}_${mtime}
        echo "$Full_name" >> path/Airtime_Activation/temp_c
        echo 'phase3'

    done
#!/bin/bash
    Src_Dir1=path/Airtime_Activation/Archive
    Src_Dir2=path/Airtime_Activation/

    find "$Src_Dir1" -maxdepth 1 -name "*.xlsx" -o -name "*.csv" | sed "s/.*\///" > -print>path/Airtime_Activation/temp_a
    find "$Src_Dir2" -maxdepth 1 -name "*.xlsx" -o -name "*.csv" | sed "s/.*\///" > -print>path/Airtime_Activation/temp_b

    echo 'phase1'
    cat path/Airtime_Activation/temp_a | while read file; 
    do
        echo 'phase1.5'
        echo "$file"
        echo 'phase2'
        mtime=$(stat -c '%y' $file)
        Full_name=${file}_${mtime}
        echo "$Full_name" >> path/Airtime_Activation/temp_c
        echo 'phase3'

    done

cat /path/Airtime_Activation/temp_b | while read file
#while IFS="" read -r -d $'\0' file; 

do
    #echo "$file"
    echo 'phase2'
    mtime=$(stat -c '%y' $Src_Dir2/$file)
    Full_name=${file}_${mtime}
    echo "$Full_name" >> path/temp_d
    echo 'phase3'

done


#file compare and delete old files from outisde archive
grep -Ff temp_d temp_c > path/Airtime_Activation/temp_e
cat path/Airtime_Activation/temp_e | while read file
#while IFS="" read -r -d $'\0' file; 

do
    #echo "$file"
    echo 'phase2'
    echo "${file%_*}"
    rm $Src_Dir2/${file%_*}
    echo 'phase3'

done