【问题标题】:rename file names using folder name but keep the digit same使用文件夹名称重命名文件名,但保持数字相同
【发布时间】:2016-06-22 14:40:32
【问题描述】:

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

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;`

【问题讨论】:

  • 向我们展示您存放文件的文件夹结构。
  • 文件夹结构是目录/子目录/文件,我的终端是目录。
  • 在我看来您只是想将fastqjoin 文件夹重命名为foldername
  • @4castle 是的,但我想保持 un[digit] 和相同的文件格式。所以 fastqjoin.un1.fastq, fastqjoin.un2.fastq, fastqjoin.un1.fasta, fastqjoin.un2.fasta 会改成 foldername.un1.fasta, foldername.un2.fasta, foldername.un1.fastq, foldername.un2 .fastq.
  • 我将编辑您的问题,使其更具可读性。希望这能解决问题。

标签: regex linux bash shell


【解决方案1】:

使用${variable#fastqjoin} 删除变量开头的fastqjoin,并使用另一个循环遍历文件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-21
    • 2015-04-17
    • 2019-05-25
    • 1970-01-01
    相关资源
    最近更新 更多