我非常擅长打击任何类型的脚本和编程,所以这看起来有点像行人......请放轻松......
我有两个文件列表,$a
和$b
,包含文件基名。文件扩展名已被删除,因为$a
和$b
中的文件类型不同。
(要查看原始图像文件,必须以其他格式生成预览 - 因此具有相同基本名称的不同文件扩展名。用户删除预览以创建列表$a
。未触及原始文件 - 列出$b
)。
$b
列出文件夹b
中文件的所有基本名称。
$a
包含$b
中的部分或全部基本名称;也就是说,$b
中的某些基本名称可能不在$a
。
$a
是文件夹b
中文件的进程列表....
要查找$a
和$b
基本名称是否相同 - 这在实践中有效,但可能不是表达它的最佳方式。
if [ "$a" == "$b" ]; then
echo "$a contains all the basenames in $b"; else
echo "$a does not contain all the basenames in $b"
fi
我想我应该使用循环来查找$a
中的基本名称来选择要在文件夹b
中处理的文件 - 这样的伪代码......细节可以在以后发生......
for basename in $a; do compare basename in $b
if [ "basename in $a" == "basename in $b" ]; then
dcraw [options] rawfile
else
ignore rawfile
fi
done
也许只是条件语句......我似乎很想比较基础名称,而在$a
和$b
中查找其中一个可能已经足够了吗?
$b
是用于比较$a
中的基本名称的引用,忽略b
中基本名称不在$a
的文件夹previews=$(ls *.ppm) # not the best way of doing this but it got me started
echo $previews
$a=$(echo "$previews" | sed "s/.*\///" | sed "s/\..*//")
echo $a
raw=$(ls *.raw) # same as above
echo $raw
b=$(echo "$raw" | sed "s/.*\///" | sed "s/\..*//")
echo $b
diff <(echo "$a" ) <(echo "$b")
中的任何文件。
这是我应该遵循的逻辑 - 是否有更有效/更好的方式来看待这个?
根据先前的评论,我不确定其余的内容是否非常有用......
echo $previews
这是输出..
IMG_0064.ppm
IMG_0066.ppm
:
echo $a
IMG_0064
IMG_0066
:
echo $raw
IMG_0064.CR2
IMG_0065.CR2
IMG_0066.CR2
:
echo $b
IMG_0064
IMG_0065
IMG_0066
Files /dev/fd/63 and /dev/fd/62 differ # not very helpful
:
0065
也就是说,$a
中缺少0065.CR2
,因此请勿在{{1}}文件夹中处理0065
({1}}中的基本名称$b
) }。
ppm文件是动画中显示的原始文件的小预览,闪烁脚本。删除预览以创建流程列表b
。
答案 0 :(得分:0)
我建议使用cmp
代替diff
来获取二进制文件:
$ dd if=/dev/random of=a bs=1 count=256 # 256 bytes of random data
$ dd if=/dev/random of=b bs=1 count=256 # 256 bytes of random data
$ cmp -s a b # -s stands for silent
$ $?
1
所以在你的代码中:
cmp -s $file1 $file2
res=$?
if [[ $res -eq 1 ]]; then
# your stuff for diff files
fi
答案 1 :(得分:0)
这适用于$ a中的最后一个文件(预览基本名称) - bash没有根据我的意思扩展变量。
> # operate on raw files
>
> for i in $a; do
> dcraw -o 0 -w -h -T $a.$ext
> done