我有两个不同的文件夹
Folder1 Folder2
cmp_data_0.bin decmp_data_0.bin
cmp_data_1.bin decmp_data_1.bin
cmp_data_89.bin decmp_data_78.bin
我的 shell 脚本遍历 folder1 中的文件。我想知道 folder2 中是否存在具有相同后缀整数值的对应文件,即 ( comp_data_0.bin, decmp_data_0.bin ),( cmp_data_1.bin, decmp_data_1.bin )。
for file in Folder1/*;
do
for file1 in Folder2/*;
do
?? How to check for corresponding file with same suffix value as $file
done
done
我需要在获取具有相同后缀整数值的匹配文件后,稍后处理文件和文件 1。
答案1
无需迭代 中的文件Folder2
。对于 中的每个文件,Folder1
将其路径名重建(翻译)为 中预期的对应文件的路径名Folder2
。然后检查该文件是否存在。
#!/bin/sh
prefix1=Folder1/cmp_data_
suffix1=.bin
prefix2=Folder2/decmp_data_
suffix2=.bin
for f in "$prefix1"*"$suffix1"; do
g="${f#"$prefix1"}"
g="${g%"$suffix1"}"
g="$prefix2$g$suffix2"
if [ -e "$g" ]; then
printf '%s\t->\t%s\n' "$f" "$g"
else
printf '%s\t--\t%s\n' "$f" "NO MATCH"
fi
done
笔记:
- 代码没有检查匹配的部分是否
*
全部是数字。 - shebang
#!/bin/sh
表示代码是可移植的。您已标记狂欢。该代码在 Bash 中也能运行。 - 我在输出中使用了制表符,因此您可以通过管道连接到 来改善视觉布局
column -ts $'\t'
。这在 Bash 中可以工作;但它可能无法工作,sh
因为$'\t'
不可移植。更可移植的语法是column -ts "$(printf '\t')"
,但column
它本身首先就不可移植(即 POSIX 未指定)。