Bash脚本用于字符串concat两个变量并进行文件比较
我试图实现的是删除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中存在的文件,如果没有相同的数据文件名,则不执行任何操作。)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)将
请尝试验证您的脚本。我不完全理解您想要实现的目标。请回答您的问题并添加一个示例:哪些文件在两个目录中?哪些文件要删除,哪些文件应该保留?请将其描述为文本,而不是(仅限)作为屏幕截图。请解释当您使用示例数据运行脚本时,您希望在
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