用于将文件夹名称追加到子文件夹并移动子文件夹的外壳脚本

yhuiod9q  于 2022-10-17  发布在  Unix
关注(0)|答案(1)|浏览(199)

我在一个名为freesurfer的目录中有几个文件夹,如下所示:

freesurfer/sub-001/mri
freesurfer/sub-001/label
freesurfer/sub-001/surf
freesurfer/sub-001/stats
freesurfer/sub-002/mri
freesurfer/sub-002/label
freesurfer/sub-002/surf
freesurfer/sub-002/stats

我只想重命名‘stats’文件夹,并将其移动到其他位置:

freesurfer/sub-001/mri
freesurfer/sub-001/label
freesurfer/sub-001/surf
freesurfer/sub-001/sub-001_stats
freesurfer/sub-002/mri
freesurfer/sub-002/label
freesurfer/sub-002/surf
freesurfer/sub-002/sub-002_stats

我已经成功地编写了以下代码:

while read dir ; do 
    new_dir=$(rev <<< "$dir" | sed 's~/~_~' | rev); 
    echo "mv $dir $new_dir"; 
done < <(find . -type d -name 'stats')

当我在‘mv’命令前加上‘ECHO’并在‘STATS’目录前面附加文件夹名称时,上面的代码似乎运行得很好,但当我取消‘ECHO’时,它给出了一个错误:“没有这样的文件或目录”。我做错了什么?

uqjltbpv

uqjltbpv1#

您用于创建new_dir的代码不正确。它正在创造freesurfer/sub-002_stats而不是freesurfer/sub-002/sub-002_stats。但这并不能解释您收到的错误,因为它只是不正确地重命名文件(将所有文件移到父目录中)。
尝试:

while read dir ; do 
    new_dir=$(dirname "$dir")/$(basename $(dirname "$dir"))_stats
    mv "$dir" "$new_dir"
done < <(find . -type d -name 'stats')

相关问题