如何将文件名称指定为输入目录的一部分?

时间:2013-07-31 18:08:07

标签: bash unix

我的文件在一个目录中,格式为

- 0163-301_02_29_2008_off.nii
- 0163-301_02_29_2008_on.nii
- 0164-303_11_30_2007_off.nii
- 0164-303_11_30_2007_on.nii

我想运行一个涉及文件名称作为输入的命令。地址路径是

  

/Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/0163-301_02_29_2008_off.nii

等等。

到目前为止,我这是我编写的代码

for file in *_on.nii; do

set fileroot = ${file} cut -b 1-78
echo $fileroot

/usr/local/fsl414/bin/flirt -in $file  -ref /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_off.nii -out /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff -omat /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii/$fileroot_ontooff.mat -bins 256 -cost corratio -searchrx -90 90 -searchry -90 90 -searchrz -90 90 -dof 6  -interp trilinear

done

但是,$ fileroot集不会出现在指定的路径中,并且只输出一个空格。

3 个答案:

答案 0 :(得分:0)

修复你的变量命名,对于初学者来说:

for files in *_on.nii; do
    ^^^^^- files with an S

set fileroot = ${file} cut -b 1-78
                 ^^^^-- -file WITHOUT an S

答案 1 :(得分:0)

不要使用set,因为它的目的是操纵shell选项/变量,而不是使用它:

fileroot="$(echo ${file} | cut -b 1-78)"

还要确保将大括号中fileroot变量的引用括起来,即${fileroot}_ontooff以分隔变量名称

答案 2 :(得分:0)

我并不完全按照您的意愿行事,但如果您想从0163-301_02_29_2008_on.nii更改为0163-301_02_29_2008_off.nii

cd /Users/jjuan/Documents/MTAutism/new_MTR_datasets/UsableNii
for on_file in *_on.nii; do
    off_file=$PWD/${on_file/on.nii/off.nii}
    # Do something with off_file
done

以上用“off.nii”替换“on.nii”

更新

我更改了代码以包含每个请求的完整路径。

相关问题