使用文件夹名称重命名文件名,但保持数字相同

时间:2016-06-22 14:40:33

标签: regex linux bash shell

我想使用文件夹名称重命名子目录中的文件。我的文件就像这种格式

fastqjoin
    un1
        fasta
        fastq
    un2
        fasta
        fastq

我希望将其更改为

foldername
    un1
        fasta
        fastq
    un2
        fasta
        fastq

我发现这个脚本可以使用文件夹名称更改文件名,但我想添加正则表达式,以便它可以更改一个脚本中的所有文件

for subdir in *; do mv $subdir/fastqjoin.un1.fasta $subdir/$subdir.un1.fasta; done;

我尝试用un[0-9].fast/D, un/d.fast/D替换脚本,但没有一个能够正常工作。例如:

f`or subdir in *; do mv $subdir/fastqjoin.un[0-9].fast/D $subdir/$subdir.un[0-9].fast/D; done;`

1 个答案:

答案 0 :(得分:2)

使用${variable#fastqjoin}从变量的开头删除fastqjoin,使用另一个循环来迭代文件:

for subdir in *; do
    for pth in $subdir/*; do
        file=`basename $pth`;
        mv $pth $subdir/$subdir${file#fastqjoin};
    done;
done