bash - 使用 Bash 成对列出文件
问题描述
我在一个目录中有一组文件。它们是每个文件名的左右音轨。我希望它们被 bash 列为filename_l filename_r以便我可以使用 sox 将每个合并在一起。但是我对 bash 循环没有任何运气。
我需要循环中列出的文件为 1-2 3-4 5-6 7-8 9-10 11-12 等等。但我不知道该怎么做。
-rwxrwxrwx 1 jason jason 653K Oct 25 14:24 05_wasteland2_str_l.ogg
-rwxrwxrwx 1 jason jason 648K Oct 25 14:24 05_wasteland2_str_r.ogg
-rwxrwxrwx 1 jason jason 1.5M Oct 25 14:24 amb0010_l.ogg
-rwxrwxrwx 1 jason jason 1.5M Oct 25 14:24 amb0010_r.ogg
-rwxrwxrwx 1 jason jason 1.4M Oct 25 14:24 amb0016_l.ogg
-rwxrwxrwx 1 jason jason 1.4M Oct 25 14:24 amb0016_r.ogg
-rwxrwxrwx 1 jason jason 2.9M Oct 25 14:24 amb0017_l.ogg
-rwxrwxrwx 1 jason jason 2.9M Oct 25 14:24 amb0017_r.ogg
-rwxrwxrwx 1 jason jason 2.6M Oct 25 14:24 amb0019_l.ogg
-rwxrwxrwx 1 jason jason 2.6M Oct 25 14:24 amb0019_r.ogg
-rwxrwxrwx 1 jason jason 1.8M Oct 25 14:24 amb001_l.ogg
-rwxrwxrwx 1 jason jason 1.8M Oct 25 14:24 amb001_r.ogg
-rwxrwxrwx 1 jason jason 2.0M Oct 25 14:24 amb006_l.ogg
-rwxrwxrwx 1 jason jason 2.0M Oct 25 14:24 amb006_r.ogg
-rwxrwxrwx 1 jason jason 1.9M Oct 25 14:24 amb007_l.ogg
-rwxrwxrwx 1 jason jason 1.9M Oct 25 14:24 amb007_r.ogg
-rwxrwxrwx 1 jason jason 4.5M Oct 25 14:24 amb01_l.ogg
-rwxrwxrwx 1 jason jason 4.5M Oct 25 14:24 amb01_r.ogg
-rwxrwxrwx 1 jason jason 3.0M Oct 25 14:24 amb02_l.ogg
-rwxrwxrwx 1 jason jason 3.0M Oct 25 14:24 amb02_r.ogg
-rwxrwxrwx 1 jason jason 2.5M Oct 25 14:24 amb03_l.ogg
-rwxrwxrwx 1 jason jason 2.5M Oct 25 14:24 amb03_r.ogg
-rwxrwxrwx 1 jason jason 2.2M Oct 25 14:24 amb04_l.ogg
-rwxrwxrwx 1 jason jason 2.2M Oct 25 14:24 amb04_r.ogg
-rwxrwxrwx 1 jason jason 2.3M Oct 25 14:24 amb05_l.ogg
-rwxrwxrwx 1 jason jason 2.3M Oct 25 14:24 amb05_r.ogg
我尝试了这个 bash 循环,但它不能满足我的需要,但我肯定缺少一些小东西。
declare -a files=(*.ogg)
for (( i = 0; i < ${#files[*]}; ++ i ))
do
echo ${files[$i]} ${files[$i+1]}
done
总共有 486 个文件,手动执行此操作会占用过多的登录并且容易出错。我尝试过的每个循环都有 1-2 2-3 3-4 4-5 等等,我需要这样做以不同的方式工作,因此每个文件都与它的合作伙伴一起列出。我现有的循环给出了这个输出。
05_wasteland2_str_l.ogg 05_wasteland2_str_r.ogg
05_wasteland2_str_r.ogg amb0010_l.ogg
amb0010_l.ogg amb0010_r.ogg
amb0010_r.ogg amb0016_l.ogg
amb0016_l.ogg amb0016_r.ogg
amb0016_r.ogg amb0017_l.ogg
amb0017_l.ogg amb0017_r.ogg
amb0017_r.ogg amb0019_l.ogg
amb0019_l.ogg amb0019_r.ogg
amb0019_r.ogg amb001_l.ogg
amb001_l.ogg amb001_r.ogg
amb001_r.ogg amb006_l.ogg
amb006_l.ogg amb006_r.ogg
amb006_r.ogg amb007_l.ogg
amb007_l.ogg amb007_r.ogg
amb007_r.ogg amb01_l.ogg
amb01_l.ogg amb01_r.ogg
amb01_r.ogg amb02_l.ogg
amb02_l.ogg amb02_r.ogg
这不是我所追求的。但我希望有一个简单的解决方案来解决这个问题。
我希望能够输出这个。
05_wasteland2_str_l.ogg 05_wasteland2_str_r.ogg
对于每个文件,_l 和 _r。我希望能够使用 sox 来合并每对文件。
这样我就可以使用它来合并文件。
袜子-M 05_wasteland2_str_l.ogg 05_wasteland2_str_r.ogg 05_wasteland2_merged.ogg
但是我发现成对列出文件是非常困难的。这最终可能会非常具有挑战性。
解决方案
您可以使用以下事实,即有一对其他名称相同的文件_l
和_r
:
for f in *_l.ogg; do
echo "$f" "${f/%_l.ogg/_r.ogg}"
done
这将遍历所有以 结尾的文件_l.ogg
,然后将这些文件对与_l.ogg
(锚定在字符串末尾)被替换的文件一起打印出来_r.ogg
。
推荐阅读
- javascript - Firestore batch.commit() 在第一次调用时不会向服务器发送数据
- tfs - 是否可以在 TFS 中为创建的团队项目添加报告功能?
- excel - 尝试使用 vba 为不同用户更改查询表连接路径
- python - 如何从我的代码中将 input_shape 更改为一个通道,如 (64,64,1)?
- python - 为什么列表推导闭包会在 python 3 中抛出 `NameError` 而在 python 2 中却没有?
- javascript - 表格行中的Vue多条件
- r - 如何在 R、Windows 64 位中安装 word2vec 的软件包?
- python - 如何使用 python 自动缩放 azure data explorer(ADX) kusto 集群(优化/自定义)
- powershell - 使用 html 表的 Powershell 的简单问题
- excel - 定义引用某个值的范围。(.find 方法)