rm
파일 이름 glob 또는 wget
.
Ubuntu 16.04에서는 다음을 수행했습니다.
set -a
export drt="/var/www/html"
export pma="[pP][hH][pP][mM][yY][aA][dD][mM][iI][nN]"
set +a
echo $drt # Got the above.
echo $pma # Got the above.
그런 다음 실행 가능한 스크립트( ~/myScripts/tp_pma.sh
)를 실행했습니다.
#!/bin/bash
rm -rf ${drt}/${pma}*
wget -P ${drt} https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip ${drt}/${pma}*.zip
mv ${drt}/${pma}*/ ${drt}/phpmyadmin/
rm ${drt}/${pma}*.zip
스크립트가 부분적으로 성공했습니다.
- 첫 번째 작업이
rm
성공했을 수도 있고 아래 문제가 모두 발생했을 수도 있습니다. - 부분적으로 성공했습니다
wget
. 새 PMA 사본이 포함된 zip 파일이drt
. - 작동했고
unzip
zip의 압축이 풀렸고 최신 phpmyadmin 디렉토리를 얻었습니다. - 실패했습니다
mv
(아래 오류 참조). 디렉토리가phpMyAdmin-4.7.7-all-languages
내 홈 디렉토리에 남아 있기 때문에 예상한 대로 디렉토리가 로 이동되지도 않고 이름도 변경drt
되지 않습니다 .phpmyadmin
- 마지막
rm
성공 - 내 홈 디렉토리에서 zip이 삭제되었습니다.
fr 오류가 발생하지 않습니다 wget
.
그리고 pma
왠지 값이 phpMyAdmin-4.7.7-all-languages
. 나는 그것을 그 값으로 바꾸지 않았습니다.
여기서 무엇이 실패할 수 있으며 그 이유는 무엇입니까?
답변1
사용한 명령은 아카이브가 있는 위치가 아닌 실행 중인 디렉터리 unzip
에 아카이브를 추출합니다 . unzip
먼저 아카이브가 포함된 디렉터리로 변경하거나 다음을 사용할 수 있습니다.-d
옵션:
[-d exdir]
파일을 추출할 선택적 디렉터리입니다. 기본적으로 모든 파일과 하위 디렉터리는 현재 디렉터리에 다시 생성됩니다.
아마도 chdir 옵션을 선택할 것입니다.
#!/bin/bash
cd "$drt"
rm -r ${pma}*
wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip
unzip phpMyAdmin-latest-all-languages.zip
mv ${pma}*/ phpmyadmin/
rm phpMyAdmin-latest-all-languages.zip
pma
또한, "값이 어떻게든 변경되었습니다 " 라고 했을 때 phpMyAdmin-4.7.7-all-languages
, 따옴표 없이 변수를 사용하면 파일명 패턴으로 사용되기 때문에, echo $pma*
패턴과 일치하는 파일이 있으면 기존 파일의 이름이 표시되므로 주의하시기 바랍니다.
(대소문자 구분 모드가 필요한지 잘 모르겠습니다. 이름 형식이 에서 변경될 것으로 예상하는 현실적인 이유가 있습니까 phpMyAdmin
? phpmyadmin
)
답변2
대체 스크립트에 대한 제안:
#!/bin/sh -ex
destdir="/var/www/html/phpmyadmin"
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT # remove temporary directory on termination
wget -O "$tmpdir/archive.zip" \
"https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip"
cd "$tmpdir" && {
unzip archive.zip
rm -f archive.zip
# The only thing in the current (temporary) directory now is the
# directory with the unpacked zip file.
mkdir -p "$destdir"
mv ./* "$destdir"/
}
아카이브가 이름이 지정된 하위 디렉토리로 추출되면 phpMyAdmin-4.7.7-all-languages
스크립트는 /var/www/html/phpmyadmin
아카이브의 내용을 에서 사용할 수 있도록 해당 아카이브를 이동합니다 /var/www/html/phpmyadmin/phpMyAdmin-4.7.7-all-languages
.
-ex
스크립트 만들기
- 유틸리티가 실패하면 종료(
-e
) - 유용할 수 있는 추적 정보를 출력합니다(
-x
).
mv
이 스크립트를 두 번 실행하면 동일한 이름의 디렉터리가 대상 위치에 이미 존재하기 때문에 마지막 실행이 실패하게 됩니다 . $destdir
이 스크립트는 아래의 기존 디렉터리를 수정하지 않습니다.
스크립트가 완료되거나 오류와 함께 종료되거나 종료되면 스크립트는 다운로드한 아카이브를 저장하고 압축을 푸는 데 사용되는 임시 디렉터리를 삭제합니다.
이 스크립트의 루트 및 보안과 관련하여:
쓰기 위해 루트 권한이 필요한 경우 $tmpdir
다음을 수행하십시오.아니요루트로 스크립트를 실행하세요! 대신 sudo
마지막 항목 앞에 삽입됩니다 mv
.
내가 아는 한 유일한 인수는 이고 어떤 -type 명령 $destdir
에서도 사용되지 않으므로 실수로 삭제될 위험은 없습니다 . rm $var1/$var2*
실제로 설정을 해제 $destdir
하면 스크립트가 mkdir
.