【问题标题】:script to remove middle character from multiple directories then rename files in subdirectories to include directory + file name从多个目录中删除中间字符然后重命名子目录中的文件以包含目录+文件名的脚本
【发布时间】:2016-11-11 12:32:36
【问题描述】:

我有两个目标要努力实现,需要一些帮助。

这里是概述:

有数百个包含相同 001.pdf 文件的随机数 ( 5555#5555 ) 文件夹/目录。我想:

1:从每个文件夹/目录中删除“#”符号

2:重命名 001.pdf 文件以包含新文件夹编号和 001.pdf

期望的结果:文件夹5555#5555变成55555555,其中包含001.pdf文件,变成55555555.001.pdf

希望这是有道理的,谢谢。

【问题讨论】:

  • 试试for dir in "*#*"; do mv "$dir" ${dir//#}; mv ${dir//#}/001.pdf ${dir//#}/${dir//#}.001.pdf; done
  • 或者你可以试试rename '#' '' *; for f in */001.pdf; do rename '/' '/'${f%%/*}. $f; done

标签: bash shell rename removeall


【解决方案1】:
for f in *#*;
do
  newFolder=$(echo ${f//%})
  mv $f $newFolder
  newFile=$(printf $newFolder".001.pdf")
  mv $newFolder/001.pdf $newFolder/$newFile
done

应该这样做,尽管可能有更优雅的解决方案。如果您想在没有# 的情况下捕获其他文件,请更改循环的正则表达式。

【讨论】:

    【解决方案2】:

    所以更新:感谢您的建议。这是我必须为我工作的。可能不是最好的方法,但是嘿。

      curdir=`pwd`
      for f in `find . -maxdepth 1 -type d -name "*#*" -print`;
      do
       echo "folder is $f"
        newFolder=`echo $f | sed 's/#//g'`
        echo mv $f $newFolder
        mv $f $newFolder
        echo newfolder is $newFolder
        cd $newFolder
        for file  in `find . -maxdepth 1 -type f -printf '%f\n'`; do
          echo "mv $file to ${newFolder}_$file"
          mv $file ${newFolder}_$file
        done
        cd $curdir
      done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2021-11-27
      • 2018-08-29
      • 2023-01-04
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多