【问题标题】:Append a prefix to all files recursively with rename使用重命名递归地将前缀附加到所有文件
【发布时间】:2021-05-27 21:00:25
【问题描述】:

我正在尝试通过以下方式将前缀 00_ 递归地附加到我的所有 pdf 文件中:

find . -name "*.pdf" | rename 's/^/00_/' *

但是,通过这种方式,我将前缀附加到路径。用rename递归修改文件名的表达式是什么?

【问题讨论】:

    标签: bash rename


    【解决方案1】:

    简单的bash,不使用外部命令(但mv):

    #!/bin/bash
    
    shopt -s globstar
    for pathname in **/*.pdf; do
        basename=${pathname##*/}
        dirname=${pathname%"$basename"}
        mv -- "$pathname" "${dirname}00_$basename"
    done
    

    【讨论】:

      【解决方案2】:

      在while循环中使用find和处理结果:

      while read fil;
      do 
         file=$(basename $fil);                    # Extract the file name from the path
         dir=$(dirname $fil)                       # Extract the directory from the path
         mv -f "$fil" "$dir/00_$file"              # Use file and dir for the move command
      done <<< "$(find . -name "*.pdf")"
      

      【讨论】:

        【解决方案3】:

        默认情况下,重命名会修改整个路径。通过传递-d 标志可以单独考虑文件名。另请注意,* glob 将匹配当前目录中的所有文件,而不仅仅是您传递给stdin 的文件。所以要在文件名前面加上00_,请使用:

        find . -name "*.pdf" | rename -d 's/^/00_/'
        

        您还可以添加 -n 标志来进行试运行,其中将打印重命名而不执行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-28
          • 1970-01-01
          • 2016-01-31
          • 1970-01-01
          • 2011-06-15
          • 2015-11-17
          • 1970-01-01
          相关资源
          最近更新 更多