我想用bash中的目录名命名一个文件

我想用bash中的目录名命名一个文件,bash,shell,Bash,Shell,我正在尝试创建名称为倒数第二个目录的文件: 例如: 目录:a/b/c/d/e/f/g/h/i/j 文件夹h的名称因具体情况而异 所以我创建了一个数组 array=(/ a / b / c / d / e / f / g / * / * / *) len=${#array[@]} for (( q=0; q<$len; q++ )); do cd ${array[$q]} sleep 1 mri_convert 0001*.dcm RAW.nii.gz #

我正在尝试创建名称为倒数第二个目录的文件:

例如: 目录:a/b/c/d/e/f/g/h/i/j

文件夹h的名称因具体情况而异

所以我创建了一个数组

array=(/ a / b / c / d / e / f / g / * / * / *)
len=${#array[@]}

for (( q=0; q<$len; q++ ));    
do 
    cd ${array[$q]}
    sleep 1
    mri_convert 0001*.dcm RAW.nii.gz #--->this line is just converting the format of file 0001*.dcm in to file RAW.nii.gz
done
然后:

mri_convert 0001*.dcm ${s1##*/}_RAW.nii.gz
但它不起作用。

怎么样

cd/a/b/c/d/e/f/g
对于dir in*;做
[[-d$dir]| |继续
对于“$dir”/*/*/”中的子目录;做(
#在子shell中执行此操作,这样我们就不需要“撤消”此cd
cd“$subdir”
mri_convert 0001*.dcm“${dir}_RAW.nii.gz”
); 完成
完成
怎么样

cd/a/b/c/d/e/f/g
对于dir in*;做
[[-d$dir]| |继续
对于“$dir”/*/*/”中的子目录;做(
#在子shell中执行此操作,这样我们就不需要“撤消”此cd
cd“$subdir”
mri_convert 0001*.dcm“${dir}_RAW.nii.gz”
); 完成
完成

让我们看看我是否能帮上忙。我不太清楚您试图做什么的细节(主要是因为您发布的代码:

for (( q=0; q do cd ${array[$q]} sleep 1 mri_convert 0001*.dcm RAW.nii.gz
语法上不正确。所以,这不可能是你真正在做的

这只是我将如何处理这样一个问题的提示:

for path6 in /a/b/c/*/*/*
do
    path5="${path6##*/}"
    path4="${path5##*/}"
    name4="${path4%/*}"
    echo "Processing ${path4}"
    mriconvert "${path6}"/0001*.dcm "${path6}/${name4}_RAW.nii.gz"
done

让我们看看我是否能帮上忙。我不太清楚你想做什么的细节(主要是因为你发布的代码:

for (( q=0; q do cd ${array[$q]} sleep 1 mri_convert 0001*.dcm RAW.nii.gz
语法上不正确。所以,这不可能是你真正在做的

这只是我将如何处理这样一个问题的提示:

for path6 in /a/b/c/*/*/*
do
    path5="${path6##*/}"
    path4="${path5##*/}"
    name4="${path4%/*}"
    echo "Processing ${path4}"
    mriconvert "${path6}"/0001*.dcm "${path6}/${name4}_RAW.nii.gz"
done

这不可能是您在实际代码中创建数组的方式。如果我理解正确,您的循环将从根
/
开始,转到
/a
,然后返回根
/
/b
,并继续这样做…但是
*
是什么?您如何解决这个问题?您又是如何解决的呢要查找至少驻留3层的目录以便执行您计划执行的操作,请执行以下操作:s1=“${array%/*/*}”$echo“${s1##*/}”其中,数组是一个向量,它包含一组无法在实际代码中创建
数组的方向。如果我理解正确,您的循环将从根
/
开始,转到
/a
,然后返回到根
/
/b
,然后继续这样做……但是
*?您如何解决这个问题?您还将如何找到一个至少驻留3层的目录,以便执行您计划执行的操作?这就是如何找到驻留3层的目录的名称:s1=“${array%/*/*}”$echo“${s1##*/}”其中数组是一个包含一组方向的向量。我想你的意思是
继续
而不是
下一步
?我想你的意思是
继续
而不是
下一步