作为Linux noob(想要学习!),我一直在浏览和搜索,但遗憾的是我无法为我的问题找到合适的解决方案。我有一个包含几个文件的目录(很多),我想将它们移到不同的目录(也可以制作)。更具体一点:
我的目录是:/ data / myowndir /,每个文件的名称都是
- CV02_T1_ [随机字符] .REC
- PM03_T2_ [随机字符] .PAR
我想将每个文件移动到这个目录中的一个子目录中,它们各自的前7个字符(文件名),这样:
- CV02_T1 _ * .REC ---> /数据/ myowndir / CV02_T1
- CV02_T1 _ *。PAR ---> / data / myowndir / CV02_T1(与上一个目录相同)
- PM03_T1 _ * .REC ---> /数据/ myowndir / PM03_T1
- PV05_T2 _ *。PAR ---> /数据/ myowndir / PV05_T2
- 等
所以我想移动多个文件和创建这些多个目录。
但是,有两个限制因素。
PM03_T2_ [随机字符] sT13 [随机字符] .PAR ---> /数据/ myowndir / PM03_struc
(因此只有文件名的前5个字符和附加字符串[struc]添加到新目录名中)
任何人都知道如何做到这一点?我应该编写脚本还是可以从命令终端执行此操作?我一直在阅读mv,mmv,find,while,for,rsync的类似问题和手册页的其他答案;但我不知道怎么把它放在一起。
编辑: 如果我的问题是过于具体暗示,那么让我先重新说明它,使其更清晰,并删除约束:
如何根据文件名的第一部分将多个文件从目录移动到多个子目录?
答案 0 :(得分:0)
我假设你的文件名开头有两个以上7个字母的序列(因为否则你只能使用带有bash扩展名的mv命令)。在bash上,将“特殊”文件与中间的字母序列一起移动到新目录:
cd /data/myowndir/
for filename in *sT13*.*; do
if [ "${filename: -4}" != ".nii" ]; then
dir_name=${filename:0:5};
mkdir -p ${dir_name}struc
mv -i $filename ${dir_name}struc/${filename}
fi
done
然后将所有其他文件移动到各自的新文件夹:
for filename in *.*; do
if [ "${filename: -4}" != ".nii" ]; then
dir_name=${filename:0:7};
mkdir -p $dir_name
mv -i $filename $dir_name/${filename}
fi
done
-p
命令的mkdir
选项可确保在目录已存在时不会出错。 ${string:0:7}
选择字符串的前7个字母