Unix 파일을 디렉토리에 복사하고 에코하는 방법

Unix 파일을 디렉토리에 복사하고 에코하는 방법

복사 명령을 터미널에 에코하는 디렉터리에 파일을 복사하는 for 루프를 사용하여 스크립트를 작성하려고 합니다. 파일을 복사하는 스크립트를 성공적으로 얻었지만 echo각 복사 명령을 터미널로 보내는 데 문제가 있습니다. 예를 들어, 파일 a, b, c을 디렉토리에 복사하는 경우 2파일을 복사할 때마다 이라고 말하고 싶습니다 path/file copied to /path/path/directory.

이것이 내가 지금까지 가지고 있는 것입니다:

for i in /Users/ashleyschumann/Pictures                          
do
    cp -r ./Pictures ./BACKUP_FILES2

    #echo "filename copied to BACKUP_FILES2"
    #echo "$fn copied to $ashleyschumann/BACKUP_FILES2"
done

나는 이 두 주석 라인을 모두 시도했지만 둘 다 예상한 결과를 얻지 못했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

for 루프의 결과는 다음과 같습니다.하나항목이며 cp 명령에는 사용되지 않습니다. 다음과 같이 보일 수 있습니다:

BACKUP_DIR="/Users/ashleyschumann/BACKUP_FILES2/"
for item in /Users/ashleyschumann/Pictures/*
do
    cp -r $item ./BACKUP_FILES2
    echo "$item copied to $BACKUP_DIR"
done

그러나 Muru가 이미 말했듯이 cp -v그는 그렇게 할 것입니다.

답변2

가장 쉬운 방법은 복사 명령에서 상세 모드를 활성화하는 것입니다.

cp -av Pictures BACKUP_FILES2/

또는

rsync -av Pictures BACKUP_FILES2/

메시지를 사용자 정의하려면 파일을 반복해야 합니다. Pictures파일 디렉터리를 포함 할지 여부를 알려주지 않았으므로 몇 가지 대체 솔루션을 제공하겠습니다.

1. 단일 레벨 파일 디렉토리

#!/bin/bash
# Backup files from a single level directory
target=BACKUP_FILES2/Pictures

# ensure target exists
mkdir -p "$target"

# here we go
for pic in Pictures/*
do
    if [[ -f "$pic" ]]
    then
        # it's a file
        cp -p "$pic" "$target/" &&
            echo "Copied $pic" >&2
    fi
done

다음은 파일 디렉터리 트리에 대한 몇 가지 옵션입니다.

#!/bin/bash
# Backup a tree of files using cp and a customised message
target=BACKUP_FILES2

find Pictures -exec bash -c '
    for i in "$@"
    do
        if [[ -d "$i" ]]
        then
            mkdir -p "/tmp/target/$i" && echo "Created directory $i" >&2
        else
            cp -p "$i" /tmp/target/"$i" && echo "Copied $i" >&2
        fi
    done
' _ {} +

또는

#!/bin/bash
# Backup a tree of files using rsync and a customised message
target=BACKUP_FILES2

find Pictures -type f -exec bash -c '
    for i in "$@"
    do
        rsync -aqR --no-r "$i" "$target" && echo "Copied $i" >&2
    done
' _ {} +

관련 정보