【问题标题】:Looping through two directories in bash循环遍历bash中的两个目录
【发布时间】:2021-08-13 04:31:35
【问题描述】:

我有两个目录,每个目录有 50 个文件(例如),我需要按顺序进行比较。

说 dir1/file00 需要与 dir2/file00 比较,dir1/file01 与 dir2/file01 比较,dir1/file02 与 dir2/file02 等等。

我有一个 python 脚本来进行我需要在 shell 脚本中调用的比较。我将如何遍历这两个目录并将文件作为参数传递给 python 脚本?我需要将两个目录中的文件依次传递给脚本。

很抱歉,如果以前有人问过这个问题,我在任何地方都找不到好的解决方案,而且我对 shellscripting 还是很陌生。

【问题讨论】:

  • 为什么要写任何东西,这就是diff 的用途,例如diff -uN dir1 dir2。 (请参阅选项-Z-b-w-B 以了解空格控制)
  • @SHA : 你想如何处理只在一个目录中而不在另一个目录中的文件?如果有子目录,想要的效果是什么?
  • @user1934428 文件遵循编号系统,因此将在开始时进行处理。它们是计算机生成的文件,因此它们丢失的可能性很小,目前我不需要担心。无论哪种方式,我最终都使用了大括号扩展,它实现了我的目的:)
  • @DavidC.Rankin 实际上我最后确实使用了 diff 来比较每个目录中的文件!但由于我需要打印出每个文本文件中各种差异的报告,我不得不求助于调用另一个脚本,该脚本包含该部分代码,文件本身作为命令行参数。
  • @SHA :不要忘记大括号扩展是相当固定的。如果你有一天 51 个文件,你必须编辑你的脚本。鉴于您的常规编号,通配符模式 file[0-9][0-9] 会更灵活(至少允许最多 99 个文件)。

标签: linux bash shell


【解决方案1】:

方法很多。如果你提前知道名字,brace expansion:

for num in {00..49}; do
    compare "dir1/file$num" "dir2/file$num"
done

如果上限在变量中,类似 C 的 for loop 可能更合适:

maxfile=49
for (( i = 0; i <= maxfile; i++ )); do
  printf -v file "file%02d" $i # Assign to variable instead of printing
  compare "dir1/$file" "dir2/$file"
done

【讨论】:

  • 大括号扩展是我一直在寻找的答案!感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
  • 2013-09-20
  • 1970-01-01
  • 2016-03-24
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多