我想复制给定类型的文件及其内部子目录。我认为 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
变量,否则它将不适用于包含]
.