하위 디렉터리를 사용하여 파일을 연속 번호로 복사하고 이름을 바꿉니다.

하위 디렉터리를 사용하여 파일을 연속 번호로 복사하고 이름을 바꿉니다.

특정 유형의 파일과 해당 내부 하위 디렉터리를 복사하고 싶습니다. 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 에서는 작동하지 않습니다 ].

관련 정보