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