我正在运行以下代码
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/