我最近用bash做了一些事情,主要是关于音频文件(sox批处理脚本)。我试着去学习,我正在阅读,阅读和搜索,但有时候我要解决的“简单”问题只是引导我走了几行,网页,最终没有答案。这是其中之一:
我需要处理给定输入文件夹($1
)的文件1,并将其中一个参数与另一个给定输入文件夹($2
)的文件1进行比较。
通过:“文件1”,我的意思是:如果你调用目录内容将列出的第一个文件;喜欢:
for f in "$1"/*
do
echo $f
done
我的目标是通过配对将文件夹$1
的文件n与文件夹$2
的文件n进行比较,其中“n”是文件夹中文件的“位置”,不是'无论是按名称列出还是其他什么,因为当我运行脚本时,它们将在文件夹$1
和文件夹$2
中以相同的方式列出。
Applescript让我以简单的方式处理文件夹1的文件4;在bash脚本中会不会很复杂,或者我完全错过了一个基本的东西?
非常感谢
答案 0 :(得分:0)
令人惊讶的是,这实际上有可能正常工作,因为POSIX保证文件名扩展的结果根据当前语言环境(链接后面的2.13.3)进行排序,而bash必须遵循它。请注意,不同的语言环境可能会产生不同的排序顺序。
由于问题被标记为" bash,"除此之外我不会理解POSIX兼容性,并建议使用bash数组:
files=("$1"/*)
echo "${files[4]}"
这也可以用作索引变量:
files=("$1"/*)
i=4
echo "${files[i]}"
然而,我不能看到这个结构如何被巧妙地使用,而且听起来好像你实际上正在寻找diff -r "$1" "$2"
左右。
答案 1 :(得分:0)
当文件名相同时(响应@Wintermute的答案建议的内容),您可以在没有数组的情况下处理它:
ls $1 | while read fileWithPath; do
file=${fileWithPath##*/}
echo "My own soxdiff between $1/$file and $2/$file"
done