サブディレクトリを使用してファイルを連続番号にコピーし、名前を変更します。

サブディレクトリを使用してファイルを連続番号にコピーし、名前を変更します。

特定の種類のファイルとその内部サブディレクトリをコピーしたいと思います。 abc_folderにファイルをコピーした後、zzz.txtファイルのコピーが機能しているようです。この問題をどのように解決できますか?

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変数が必要です。それ以外の場合、containでは機能しません]

関連情報