소스 폴더에서 대상 /*file_extension*(예: "txt") 폴더로 파일을 반복적으로 복사합니다.

소스 폴더에서 대상 /*file_extension*(예: "txt") 폴더로 파일을 반복적으로 복사합니다.

내 코드는 다음과 같습니다. rec_copy() 함수의 일부가 제대로 작동하지 않습니다. 확장 폴더가 대상 폴더에 생성되지만 파일이 해당 폴더에 복사되지 않습니다.

#!/bin/bash
if [ $# -ne 2 ]
then
        echo "Usage: $0 <source> <destination>"
        exit
fi

if [ ! -d $1 ]
then
        echo "Source folder does not exist"
        exit
fi

if [ -d $2 ]
then
        rm -r $2
        mkdir $2
else
        mkdir $2
fi

extension=`ls -l $1 | grep -v "^d" | awk '{ print $10; }' | sed 's/^.*\.//g'`
for f in $extension
do
        if [ ! -d $1/$f ]
        then
                mkdir $2/$f
        fi
done

rec_copy(){
folder=`ls $1`
for f in $folder
do
        dest=`echo "$f" | sed 's/.*\.//g'`
        if [ -f $1/$f ]
        then
                cp $1/$f $HOME/$2/$dest
        elif [ -d $1/$f ]
        then
                rec_copy $1/$f
        fi
done
}

rec_copy $1

답변1

필요한 사람이 있을 경우를 대비해 답변은 다음과 같습니다.

#!/bin/bash

if [ $# -ne 2 ]
then
        echo "Usage: $0 <izvor> <destinacija>"
        exit
fi

if [ ! -d "$1" ]
then
        echo "Izvorniot folder ne postoi"
        exit
fi

if [ -d "$2" ]
then
        rm -r "$2"
        mkdir "$2"
else
        mkdir "$2"
fi

extension=`ls -l "$1" | grep -v "^d" | awk '{ print $10; }' | sed 's/^.*\.//g'`
for f in $extension
do
        if [ ! -d "$1/$f" ]
        then
                mkdir "$2/$f"
        fi
done

rec_copy(){
folder=`ls "$1"`
for f in $folder
do
        dest=`echo "$f" | sed 's/.*\.//g'`
        to=`cp "$1/$f" "$2/$dest"`

        if [ -f "$1/$f" ]
        then
                echo "$to"
        elif [ -d "$1/$f" ]
        then
                rec_copy "$1/$f" "$2"
        fi
done
}

rec_copy "./$1" "./$2"

관련 정보