【问题标题】:change name of file in nested folders更改嵌套文件夹中的文件名
【发布时间】:2018-03-31 19:12:41
【问题描述】:

我一直在想办法重命名嵌套文件夹中列出的文件名,但在解决此问题时遇到了问题。作为一项测试,我已经能够剪下我想要更改的名称的哪一部分,但想不出如何将其放入变量中并将名称链接在一起。文件格式如下所示。

XXX_XXXX_YYYYYYYYYY_100426151653-all.mp3

我一直在测试这种格式以删除我想要更改的部分,但我不确定这是否是最好的方法。

回显 XXX_XXXX_YYYYYYYYYY_100426095135-all.mp3 |awk -F_ '{print $4}' |剪切-c 1-6

我想把名字中的100426151653改成这个20100426-151653的格式。

我尝试使用此命令重命名文件,格式为“s///g”,但该格式不起作用,我不得不重命名文件名“”以删除空格。

所以文件会这样开始 XXX_XXXX_YYYYYYYYYY_100426151653-all.mp3 就这样结束 XXX_XXXX_YYYYYYYYYY_20100426-151653-all.mp3

【问题讨论】:

    标签: linux bash awk rename file-rename


    【解决方案1】:

    如何使用 find 和 bash 函数

    #!/bin/bash
    
    modfn () {
      suffix=$2
      fn=$(basename $1)
      path=$(dirname $1)
    
      fld1=$(echo $fn | cut -d '_' -f1)
      fld2=$(echo $fn | cut -d '_' -f2)
      fld3=$(echo $fn | cut -d '_' -f3)
      fld4=$(echo $fn | cut -d '_' -f4)
      fld5=${fld4%$suffix}
      l5=${#fld5}
      fld6=${fld5:0:$(($l5 - 6))}
      fld7=${fld5:$(($l5 - 6)):6}
    
      newfn="${fld1}_${fld2}_${fld3}_20${fld6}-${fld7}${suffix}"
    
      echo "moving ${path}/${fn} to ${path}/${newfn}"
      mv ${path}/${fn} ${path}/${newfn}"
    }
    
    
    export -f modfn
    
    suffix="-all.mp3"
    export suffix
    
    find . -type f -name "*${suffix}" ! -name "*-*${suffix}" -exec bash -c 'modfn "$0" ${suffix}' {} +
    

    上面的 bash 脚本使用 find 在当前文件夹中搜索,它的内容是像 WWW_XXXX_YYYYYYYYYY_AAAAAABBBBBB-all.mp3 之类的文件,但排除了那些已经重命名并且看起来像WWW_XXXX_YYYYYYYYYY_20AAAAAA-BBBBBB-all.mp3

    W,X,Y,A,B 可以是除下划线或破折号以外的任何字符。

    所有找到的文件都被重命名

    注意:有一些方法可以缩小上述脚本,但这样做会使操作不那么明显。

    【讨论】:

    • 我已经让程序运行了,它就像你说的那样运行。那么有两个问题。 1.一次只做一个文件。其次是它不能很好地处理嵌套文件。你有什么建议吗?
    【解决方案2】:

    这个 perl 单行代码可以完成这项工作:

    find . -name "XXX_XXXX_YYYYYYYYYY_*-all.mp3" -printf '%P\n' 2>/dev/null | perl -nle '$o=$_; s/_[0-9]{6}/_20100426-/; $n=$_; rename($o,$n)if!-e$n'
    

    注意:我只带了一个查找命令和正则表达式部分。 perl one 班轮的功劳归于 perlmonks 用户http://www.perlmonks.org/?node=823355

    【讨论】:

    • 如果我正确地看到了这一行,它似乎只适用于日期名称为 _20100426 的文件。我认为这不适用于日期不同的嵌套文件。
    猜你喜欢
    • 2021-07-17
    • 2016-11-30
    • 2018-07-28
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多