比较shell脚本中前n个字符的两个文件名



我的要求是

localfolder=green.txt,yellow.txt,blue.txt 
remotefolder=green_202105050333.txt,yellow_202105050333.txt,blue_202105050333.txt

我想将两个文件夹比较为IF[[localfolder==remotefolder]]例如:green.txt=green_202105050333.txt(此处条件将始终显示每个文件的第一个字符或消除数据和时间(然后将结果显示为"0";匹配的";

请帮我把逻辑搞清楚。提前感谢!!

您可以执行下一步操作,为每个目录(文件夹(创建一个文件,例如,如果您使用ls:

# in local directory
ls localfolder > localFolder.txt
# in some remote directory
ls remoteFolder > remoteFolder.txt

我们可以假设文件是下一个:

localFolder.txt:

green.txt
yellow.txt
blue.txt

remoteFolder.txt:

green_202105050333.txt
yellow_202105050333.txt
blue_202105050333.txt
gray_202105050333.txt

现在将文件放在同一目录中并执行下一个:

sed -r 's/.[a-z]+//g' localFolder.txt | xargs -I{} grep {} remoteFolder.txt | sed -r 's/_[0-9]+//g'

输出为:

green.txt
yellow.txt
blue.txt

现在,如果你想在脚本中完成,那么创建一个文件,例如myScript.sh,内容必须是:

#!/bin/bash
sed -r 's/.[a-z]+//g' $1 | xargs -I{} grep {} $2 | sed -r 's/_[0-9]+//g'

授予脚本执行权限:

chmod +x myScript.sh

并像下一个一样执行:

./diff.sh localFolder.txt remoteFolder.txt

你会得到同样的结果。

这个脚本只适用于你的情况,这是一个解释的每个部分做什么

# Remove .txt or any extensions for each line in localFolder
sed -r 's/.[a-z]+//g' localFolder.txt 
# The ouput of each line is received by grep and search in remoteFolder
| xargs -I{} grep {} remoteFolder.txt
# Remove the datetime
| sed -r 's/_[0-9]+//g'

最新更新