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