For 循环有效,但循环两次

For 循环有效,但循环两次

我正在运行以下代码

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;

为了在 ./*/ 的所有子文件夹(它们的标题都是“dicom”)上执行 dcm2nii 程序并将输出保存到这些相同的子文件夹中。该循环有效,但它运行两次,在每个“dicom”子文件夹中创建重复的输出文件。有趣的是,如果我在两个地方都指定了绝对路径,但通配符 * 完好无损地包含父目录中的所有文件夹,则循环仅根据需要运行一次。如何使用相对路径使循环仅运行一次?

答案1

我猜你在测试/执行命令时有 2 个子文件夹。

你的代码:

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n ../*/dicom/); done;
  • 首先进入子文件夹$d
  • 然后执行dcm2nii ...on ../*/dicom,翻译为: 超级文件夹的所有文件夹的子文件夹“dicom”
  • 然后转到第二个子文件夹并执行相同的操作

尝试这个:

for d in ./*/ ; do (cd "$d" && dcm2nii -n y -r y -x y -g n dicom/); done;

或(可能)这个:

dcm2nii -n y -r y -x y -g n ../*/dicom/

相关内容