【问题标题】:Rename file while keeping the extension in Linux?在Linux中保留扩展名的同时重命名文件?
【发布时间】:2023-03-29 03:08:01
【问题描述】:

我有一个目录,其中包含多个具有不同扩展名的文件(pdf、doc、txt...等)。

我正在尝试根据目录名称重命名所有文件,同时保持文件扩展名相同。如果所有文件都是 PDF,则下面的代码可以正常工作,否则它也会将 txt 文件扩展名更改为 pdf。

如何在保留文件扩展名的同时重命名文件

mv "$file" "${dir}/${dir}-${count}.pdf"

【问题讨论】:

    标签: linux rename mv


    【解决方案1】:

    我假设您是在某种循环中执行此操作?如果是这样,您可以先获取文件扩展名

    ext="${file##*.}"  # eg. ext="txt", ext="pdf"...
    

    并在您的mv 命令中将pdf 替换为$ext。用shbashdashksh 测试。

    【讨论】:

      【解决方案2】:

      你可以通过 bash 做到这一点。

      您能否提供更多详细信息。你如何决定这个 $dir 和 $count 变量值。

      如果您已经知道要更改文件名的内容,如下所示

      旧名称|新名称|路径

      test.1|newtest.1|路径

      arty.2|xyz.2|路径

      如果您想用特定名称替换它,那么您可以准备一个类似上面的列表,然后通过 while 或 for 循环遍历文件。下面是简单的 bash sn-p,用于在多个目录下有文件的情况

      while IFS="|" read OLD NEW PATH
      do
          cd $Path
      
          filename=`echo $NEW|awk -F '.' '{print $1}'`
      
          filetype=`echo $NEW|awk -F '.' '{print $2}'`
      
          mv $OLD $filename.$filetype
      
      done<FILE_PATH
      

      如果要在单个目录下执行操作,那么下面的sn-p就可以了。

      for i in $(ls /tmp/temp)
      do 
          filename=`echo $i|awk -F "." '{print $1}'`
          fileType=`echo $i|awk -F "." '{print $2}'`
          mv $i $filename.$fileType
      done
      

      【讨论】:

        猜你喜欢
        • 2015-06-18
        • 2014-11-28
        • 1970-01-01
        • 2023-04-04
        • 2019-05-25
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多