일부 백업 스크립트를 작성하고 싶지만 일부 디렉터리를 제외해야 합니다. 그래서 저는 제외된 모든 디렉토리를 이와 같은 배열로 설정하기로 결정했습니다.
exclude[0] = '/home/user/test1'
exclude[1] = '/home/user/test2'
exclude[2] = '/home/user/test3'
이 배열을 tar 명령의 인수로 제공할 수 있습니까?
tar -zcvf $FILE $SOURCE --exclude=exclude
답변1
그리고 zsh
:
exclude=(
/home/user/test1
/home/user/test2
/home/user/test3
)
tar --exclude=$^exclude -zcvf $FILE $SOURCE
이 $^exclude
구문을 사용하면 위의 내용을 다음으로 확장할 수 있습니다.
tar --exclude=/home/user/test1 --exclude=/home/user/test2 \
--exclude=/home/user/test3 -zcvf the-file the-source
rc
기본적으로 , 및 es
쉘은 fish
배열을 사용하여 이 작업을 수행하므로 이러한 쉘에서는 다음을 수행할 수 있습니다.
tar --exclude=$exclude -zcvf $FILE $SOURCE
set exclude /home/user/test1 /home/user/test2 /home/user/test3
( 배열을 정의하는 데 사용됨 fish
)
답변2
명령의 각 매개변수는 문자열입니다. 이 옵션에는 배열을 전달할 수 없습니다 --exclude
. 여러 옵션을 전달 --exclude
하거나 다음과 같은 다른 방법을 사용해야 합니다.--exclude-from
.일부 쉘에는 배열에 삽입하고 각 요소 앞에 다음을 붙이는 영리한 방법이 있습니다., 그러나 대부분의 경우(sh, bash, ksh, ...)는 이를 수행하지 않습니다.
모든 셸에서 작동하는 한 가지 방법은 명령줄을 단계별로 작성하는 것입니다.
set -- tar -zcvf "$FILE"
set -- "$@" --exclude='/home/user/test1'
set -- "$@" --exclude='/home/user/test2'
set -- "$@" --exclude='/home/user/test3'
"$@" "$SOURCE"
bash 또는 ksh를 사용 중이고 제외할 패턴 세트가 있는 경우 배열을 반복하여 명령줄을 작성할 수 있습니다.
exclude=('/home/user/test1' '/home/user/test2' '/home/user/test3')
exclude_options=()
for x in "${exclude[@]}"; do
exclude_options+=(--exclude="$x")
done
tar -zcvf "$FILE" "${exclude_options[@]}" "$SOURCE"
이전 버전의 ksh 및 bash에는 연산자가 부족하여 루프 본문으로 +=
필요했습니다 .exclude_options=("${exclude_options[@]}" --exclude="$x")
제외 옵션에 대해 별도의 배열을 작성하는 대신 명명된 배열 변수 또는 위치 인수 배열에서 직접 명령줄을 작성할 수 있습니다.
exclude=('/home/user/test1' '/home/user/test2' '/home/user/test3')
set -- tar -zcvf "$FILE"
for x in "${exclude[@]}"; do
set -- "$@" --exclude="$x"
done
"$@" "$SOURCE"
답변3
대안으로 --exclude-from
스위치를 사용하여 여러 위치를 처리 할 수 있습니다.
tar --exclude-from=/home/user/exclude.txt -zcvf "$FILE" "$SOURCE"
이제 한 줄에 하나의 정규식을 포함하는 파일을 만듭니다.
cat /home/user/exclude.txt
/home/user/test1
/home/user/test2
/home/user/test3
답변4
sudo rsync -avz -e "ssh -i your-pem-key.pem" --exclude-from=folder-name-files/exclude.txt folder-name-files/ [email protected]:folder-files/
파일에서 exclude.txt
다음과 같이 무시된 모든 파일을 언급해야 합니다.
/assets
.gitignore
exclude.txt