在列表上使用mv命令并重命名每个文件

时间:2017-10-30 15:11:09

标签: linux list rename zsh mv

我正在尝试将我分析过的一些图像从一个文件夹移动到一个新文件夹,并重命名它们。每个文件(我们将调用file.nii)在每个患者文件夹中命名相同,并且我希望在移动它们时对应于他们的患者ID重命名它们。我已经创建了一个列表(让我们称之为dti.txt)并理解它需要看起来像下面发布的内容:

    for ii in $(cat dti.txt); do cd ${INFINITE_MRI_DATA}/${ii}; 
    mv file.nii destination; done

我所坚持的是尝试重命名与其患者ID相对应的每个文件,因此file.nii将变为117.nii,119.nii,依此类推。如果有帮助,他们的患者ID位于列表中的文件路径中。这就是完整文件路径的样子:

    /gandg/infinite/imaging_data/individuals/inf0238/1/dti/dtifit/analysis/

如果这是一个愚蠢的问题或者格式不正确,我道歉。我仍然是编码世界的新手。我感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

您必须从父目录中提取患者ID,这是使用路径/my/mri/da​​ta/117/file.nii(其中117是患者ID)的一个示例:

patientId=$(readlink -f $ii | dirname | cut -f'/' 4)

然后您可以将其用作新文件名的前缀

mv $oldfile ${patientId}_mri.nii 

例如

答案 1 :(得分:0)

Create one file in that file put the path which consist of patient id

 i created k.txt file and mentioned the path

 cat k.txt
/my/dir/117/ol
/my/dir/118/ol

for i in `awk -F "/" '{print $4}' k.txt`; do for j in 1.txt 2.txt; do mv $j $i.nii; done;done

Used below command  to rename the old file with patientid.nii

where 1.txt 2.txt is old files