我有一个目录AllData
,其中包含一些文件,如下所示:
AllData
|____ file_1to1000.track
|____ file_1001to2000.track
|____ file_2001to3000.track
根据文件名,我创建了带有文件名的目录。
for file in *; do dir=$(echo $file | cut -d. -f1); mkdir -p $dir; mv $file $dir; done
我想在其中创建另一个目录并保留文件。它应该像下面这样:
AllData
|__ file_1to1000
|___ cuffcompare
|____ file_1to1000.track
|__ file_1001to2000
|___ cuffcompare
|____ file_1001to2000.track
|__ file_2001to3000
|___ cuffcompare
|____ file_2001to3000.track
将文件移动到上述目录后,文件名应从 更改file_1to1000.track
为soft.track
.目录中的所有文件都需要从原始文件名更改为soft.track
它基本上应该如下所示:
AllData
|__ file_1to1000
|___ cuffcompare
|____ soft.track
|__ file_1001to2000
|___ cuffcompare
|____ soft.track
|__ file_2001to3000
|___ cuffcompare
|____ soft.track
答案1
查看:
for file in ./*; do
echo mkdir -p "${file%.*}"/cuffcompare/ && \
echo mv "$file" "$_"soft.track
done
至班轮:
for file in ./*; do echo mkdir -p "${file%.*}"/cuffcompare/ && echo mv "$file" "$_"soft.track; done
注意:echo
当您对试运行结果感到满意时,请删除上面的内容。
${file%.*}
从文件名中删除最短的匹配后缀。所以它.track
从这里的文件名末尾开始剪切。已知的参数扩展
$_
是前一个命令的最后一个参数的替代品(参见外壳特殊参数);扩展到"${file%.*}"/cuffcompare/
;
因此为找到的每个文件mkdir
创建下面的目录(-p
如果不存在则用于创建父目录)结构;
└── file_2001to3000
└── cuffcompare
然后mv
将该文件移动并重命名到其相关目录,soft.tarck
名称为:
└── file_2001to3000
└── cuffcompare
└── soft.track