2017-12-21 27 views
0

아카이브를 생성하는 데 사용하는 다음 스크립트를 추출하려는 스크립트로 변환하려고합니다. 내가 인수를 폐기 할 필요가 없습니다이 스크립트로 변화를 유지하기 위해 필요 여부를 내가 아는 해달라고아카이브를 추출하는 Bash 쉘 스크립트

[[ $# -lt 1 ]] && exit 1 

files=("[email protected]") 

#remove files and directories which are not readable 
for index in "${!files[@]}"; do 
     [[ -r ${files[index]} ]] || unset "files[index]" 
done 

[[ ${#files[@]} -eq 0 ]] && exit 1 

if tar -xzvf "${files[@]}".tar.gz; then 
     echo "OK" 
else 
     echo "Error" 
     exit 1 
fi 

:

[[ $# -lt 2 ]] && exit 1 

name=$1; shift 
files=("[email protected]") 

#exclude all files/directories that are not readable 
for index in "${!files[@]}"; do 
    [[ -r ${files[index]} ]] || unset "files[index]" 
done 

[[ ${#files[@]} -eq 0 ]] && exit 1  

if tar -czvf "${name:-def_$$}.tar.gz" "${files[@]}"; then 
    echo "Ok" 
else 
    echo "Error" 
    exit 1 
fi 

지금까지 나는이 있습니다. 나는 그 (것)들을 전부 가지고 가고 각자를 개봉 할 수 있고 싶다. 또한 사용자가 압축을 푼 파일의 위치를 ​​선택할 수있는 -C 스위치가 있음을 알 수 있습니다. 파일을 압축 해제 할 디렉토리를 변경하기를 원할 수도 있고 원하지 않을 수도 있기 때문에 사용자를위한 옵션으로 추가하는 방법에 대해서도 설명하겠다.

답변

1

불행히도 tar -xzvf one.tar.gz two.tar.gz을 수행 할 수 없습니다. 간단한 방법은 좋은 오래된 for 루프를 사용하는 것입니다

for file in "${files[@]}"; do 
    tar -xzvf "$file" 
done 

또는 당신이 사용할 수 있습니다

cat "${files[@]}" | tar -xzvf - -i 

당신은 -C 옵션에 지정된 디렉토리가 될 수있는 첫 번째 인수를 가질 수 있습니다 :

[[ $# -lt 2 ]] && exit 1 

target=$1; shift 
files=("[email protected]") 

#remove files and directories which are not readable 
for index in "${!files[@]}"; do 
    [[ -r ${files[index]} ]] || unset "files[index]" 
done 

[[ ${#files[@]} -eq 0 ]] && exit 1 

mkdir -p -- "$target" || exit 1 

for file in "${files[@]}"; do 
    tar -xzvf "$file" -C "$target" 
done 
tar에 대한 파일

목록은 다음과 같이 구성 할 수있다 :

target=$1; shift 

for file; do 
    [[ -r $file ]] && files+=("$file") 
done 
+2

'one.tar.gz'가 포함 된 경우 글쎄,'two.tar.gz', 그것은'작동합니다)' –

+0

@ DavidC.Rankin 하하, 좋은 지적이다.) – PesaThe

+0

완료 전에 OK 에코를 추가하고 에코에 오류를 발생시키는 다른 방법을 사용할 수 있습니까? – Lenk