将文件复制并重命名为带有子目录的连续编号

将文件复制并重命名为带有子目录的连续编号

我想复制给定类型的文件及其内部子目录。我认为 zzz.txt 文件的副本在复制 abc_folder 中的文件后有效。我该如何解决这个问题。

AAA
   ---aaa.txt
   ---bbb.txt
   ---zzz.txt
   ---abc_folder
                ---aaa.txt
                ---bbb.txt
                ---ccc.txt

想要的输出

    AAA
   ---aaa.txt
   ---bbb.txt
   ---zzz.txt
   ---1.txt
   ---2.txt
   ---3.txt
   ---abc_folder
                ---aaa.txt
                ---bbb.txt
                ---ccc.txt
                ---1.txt
                ---2.txt
                ---3.txt

我的代码的输出

        AAA
   ---aaa.txt
   ---bbb.txt
   ---zzz.txt
   ---1.txt
   ---2.txt
   ---4.txt
   ---abc_folder
                ---aaa.txt
                ---bbb.txt
                ---ccc.txt
                ---1.txt
                ---2.txt
                ---3.txt

我的代码

#!/bin/bash

function traverse() {
counter=1
for file in "$2"/*
do
  if [ ! -d "${file}" ]; then
      if [[ $file == $3 ]]; then
          extension="${file##*.}"
          filename="${file%.*}"
          cp "$file" "${2}/${counter}.${extension}"
          counter=$(($counter + 1))
      fi
  elif [ $1 == "-R" ] ; then
      traverse "${1}" "${file}" "${3}"
  fi
done
}
traverse "$1" "$PWD" "$2"

答案1

zsh

#! /bin/zsh -
autoload zmv
incr='++count[$1]'
typeset -A count
zmv -n '(**/)(*)(.txt)' '$1$((incr))$3'

-n(高兴时删除)

这个想法是使用一个关联数组,其键是用于计数的目录。

我们需要中间incr变量,否则它将不适用于包含].

相关内容