자주 개발되고 업데이트되는 웹 애플리케이션의 배포를 자동화하려고 합니다. 웹 애플리케이션은 이름을 알 수 없으며 디렉터리 구조가 다음과 같은 zip 파일 형식으로 제공됩니다.
unknown_name.zip
└── unknown_folder_name
└──all_the_application_files
다음을 수행하려면 bash 스크립트가 필요합니다.
- /var/www/의 모든 내용 삭제 [완료]
- 주어진 임시 경로에 Unknown_name.zip 아카이브의 압축을 풉니다. [완료]
- 알려진 tmp 경로로 cd [완료]
- 알려지지 않은_이름.zip에서 추출된 알려지지 않은_폴더_이름 내의 CD
- all_the_application_files를 /var/www로 이동합니다. [이전 문제를 해결했다면 쉽습니다.]
중요: tmp 디렉터리에는 내가 있고 싶은 디렉터리가 하나만 있습니다. 내 현재 bash 스크립트:
rm -r /var/www/*
unzip ./\*.zip \* -d /home/lese/tmp-deploy
cd /home/lese/tmp-deploy
# HERE I WOULD cd unknown_folder_name
mv * /var/www/
답변1
해결책
현재 디렉터리에 디렉터리가 하나만 있고 다른 디렉터리(다른 폴더 및 파일 없음)가 없다고 확신하는 경우 다음 명령을 사용하여 디렉터리를 입력할 수 있습니다.
cd *
디렉토리가 하나만 있다는 것을 알고 있지만 현재 디렉토리에 디렉토리가 아니고 디렉토리에 심볼릭 링크되지 않은 파일이 있을 수 있는 경우 다음을 사용할 수 있습니다.
cd */.
디렉토리만 선택하십시오.
설명하다
단일 파일은 *
셸에 의해 현재 디렉터리(숨겨진 파일, 특히 .
항상 존재하는 디렉터리와 디렉터리 제외)의 모든 파일 이름(하위 디렉터리 포함) 목록으로 확장됩니다. ..
현재 디렉터리의 유일한 콘텐츠가 가져오는 하위 디렉터리인 경우 하위 디렉터리는 다음으로 확장됩니다.
cd unknown_folder_name
그런 다음 원하는 것을하십시오.
트릭은 이것이 하위 디렉토리 자체인 임의의 하위 디렉토리 내의 */.
"자체 디렉토리"( 라는 이름)로 확장된다는 것입니다. .
파일 이름에는 가 포함될 수 없고 /
디렉토리가 하나만 있다고 가정할 때 확장되는 유일한 이름은 입니다 unknown_folder_name/.
. 물론 동일한 디렉토리입니다 unknown_folder_name
.