Bash - $ 1的文件n?

时间:2015-04-06 11:03:16

标签: bash file directory scripting-language

我最近用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脚本中会不会很复杂,或者我完全错过了一个基本的东西?

非常感谢

2 个答案:

答案 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