경로에 여러 개의 와일드카드를 사용하여 디렉터리의 모든 파일에 대해 명령을 실행합니다.

경로에 여러 개의 와일드카드를 사용하여 디렉터리의 모든 파일에 대해 명령을 실행합니다.

for 루프를 실행하여 디렉터리의 모든 파일을 복사한 다음 백업 디렉터리에 넣으려고 합니다. 서로 다른 이름을 가진 하위 디렉터리가 여러 개 있으므로 와일드카드를 여러 개 사용해야 모두 나열하고 또 다른 for 루프를 추가할 필요가 없을 것 같습니다. 이건 내 스크립트야

#!/bin/bash

DIR="/home/users/data/*"

for file in $DIR
do
        cp "$file"/**/**/*.txt* "$DIR"/backup/"$file"
done

스크립트를 실행할 때 하위 디렉터리로 들어갈 수 없고 디렉터리가 다음과 같다고 생각합니다.

/directory1/**/**/*.txt*

어떤 제안이라도 대단히 감사하겠습니다.

답변1

/home/users/data복사 만 원하는 경우 /home/users/data/backup:

rsync -ai --exclude=/backup/ /home/users/data/ /home/users/data/backup

또한 backup명령을 다시 실행할 때 디렉터리 자체가 복사되지 않도록 제외됩니다. 소스 디렉터리(및 제외 패턴의 디렉터리)에는 뒤에 슬래시가 있어야 합니다.

답변2

여기를 이용하면 더 좋을 것 같아요 find.

for FILE in $DIR
do
    find $DIR -iname '*.txt' -exec cp -fv {} ${DIR}/backup/${FILE} \;
done

디렉토리 구조를 유지하려는 경우 --parents옵션을 추가할 수 있습니다.cp

관련 정보